【Java SE】流
================================================================
1、创建流
2、过滤 filter
3、映射 map flatMap
4、分组 groupingBy
================================================================
人对象
class Person { private String name; private int age; }
1、创建流
// 数组创建流 public staticStream of(T... values); // 空流 public static Stream empty();
2、过滤 filter
Listlist = 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
Listlist = 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);
Listwords = 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
Listlist = 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'}]}
分组件数
MapgroupCount = list.stream().collect(Collectors.groupingBy(Person::getName, Collectors.counting())); System.out.println(groupCount); // 结果 {Tom=2, Alice=2}
分组合计
MapgroupSum = list.stream().collect(Collectors.groupingBy(Person::getName, Collectors.summingInt(Person::getAge))); System.out.println(groupSum); // 结果 {Tom=32, Alice=30}