天天看點

jdk8的stream流式計算的操作

jdk8之後增加了流式計算,現在根據學習了流式計算,并把過程記錄下來:

  Person.java的bean

package com.zhang.collectordemo;

/**

* @program: utilsdemo

* @description: pojo的測試類

* @author: zhangyu

* @create: 2019-06-18 13:51

*/

public class Person {

private Integer id;

private String name;

public Person(Integer id, String name) {

this.id = id;

this.name = name;

}

public Integer getId() {

return id;

public void setId(Integer id) {

public String getName() {

return name;

public void setName(String name) {

@Override

public String toString() {

return "Person{" +

"id=" + id +

", name='" + name + '\'' +

'}';

}

1) 将list變成map

* @description: 測試map

* @create: 2019-06-18 14:08

import org.junit.jupiter.api.Test;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.function.Function;

import java.util.stream.Collectors;

public class TestMapDemo {

@Test

public void fun() {

List<Person> list = new ArrayList();

list.add(new Person(1, "zhangsan"));

list.add(new Person(2, "lisi"));

list.add(new Person(3, "wangwu"));

// jdk8将連結清單變成map的方法

Map<Integer, Person> personMap = list.stream().collect(Collectors.toMap(Person::getId, Function.identity()));

// Map<Integer, Person> personMap = list.stream().collect(Collectors.toMap(Person::getId, e->e));

System.out.println(personMap.get(1));

// 從map中添加資料

System.out.println(personMap.get(2).getName());

Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));

map.put(4, "zhangyu");

System.out.println(map);

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 2) 通過流計算重複出現次數:

@Test

List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya");

Map<String, Long> result = items.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));

System.out.println(result);

3)測試對元素進行轉換: 

@Test

public void fun2() {

List<Integer> s = Arrays.asList(1, 2, 3, 4);

// s.map(x->x*2).forEach(System.out::print);

s.stream().mapToInt(x -> x).forEach(System.out::print);

System.out.println();

s.stream().mapToDouble(x -> x).forEach(System.out::println);