【Java SE】流


================================================================

1、创建流

2、过滤 filter

3、映射 map flatMap

4、分组 groupingBy

================================================================

人对象

class Person {
    private String name;
    private int age;
}

1、创建流

// 数组创建流
public static Stream of(T... values);
// 空流
public static Stream empty();

2、过滤 filter

List list = new ArrayList<>();
list.add(new Person("Alice", 20));
list.add(new Person("Tom", 11));// 滤过年龄大于15的人
List resultList = list.stream().filter(p -> p.getAge() > 15).collect(Collectors.toList());

3、映射 map  flatMap

List list = new ArrayList<>();
list.add(new Person("Alice", 20));
list.add(new Person("Tom", 21));
// 映射出姓名
List resultList = list.stream().map(Person::getName).collect(Collectors.toList());
System.out.println(resultList);
List words = new ArrayList<>();
words.add("h,e,l,l,o");
words.add("w,o,r,l,d");
// map 的结果是流
List resultStream = words.stream().map(w -> Stream.of(w.split(","))).collect(Collectors.toList());
// flatMap 的结果是字符
List resultList = words.stream().flatMap(w -> Stream.of(w.split(","))).collect(Collectors.toList());
System.out.println(resultList);

4、分组 groupingBy

List list = new ArrayList<>();
list.add(new Person("Alice", 10));
list.add(new Person("Alice", 20));
list.add(new Person("Tom", 11));
list.add(new Person("Tom", 21));

名称分组

Map> groupName = list.stream().collect(Collectors.groupingBy(Person::getName));
System.out.println(groupName);
// 结果
{Tom=[Person{name='Tom', age='11'}, Person{name='Tom', age='21'}], Alice=[Person{name='Alice', age='10'}, Person{name='Alice', age='20'}]}

分组件数

Map groupCount = list.stream().collect(Collectors.groupingBy(Person::getName, Collectors.counting()));
System.out.println(groupCount);
// 结果
{Tom=2, Alice=2}

分组合计

Map groupSum = list.stream().collect(Collectors.groupingBy(Person::getName, Collectors.summingInt(Person::getAge)));
System.out.println(groupSum);
// 结果
{Tom=32, Alice=30}