public static void main(String[] args) {
Person p1 = new Person("zhangsan",20);
Person p2 = new Person("lisi",30);
Person p3 = new Person("wangwu",40);
Person p4 = new Person("趙六",40);
List<Person> list = Arrays.asList(p1, p2, p3, p4);
System.out.println("獲取流中所有元素");
List<Person> collect = list.stream().collect(Collectors.toList());
collect.forEach(System.out::println);
//收集統計數據的對象 例如 最大最小平均總和 這個對象只返回數據 不返回對象 例如最小:返回20 而不是這個person
IntSummaryStatistics intSummaryStatistics = list.stream()
.collect(Collectors.summarizingInt(Person::getAge));
System.out.println("-----------------------------");
System.out.println("統計流中元素個數");
System.out.println("方式一stream.count() : " + list.stream().count());
System.out.println("方式二stream.collect(Collectors.counting()): " + list.stream().collect(Collectors.counting()));
System.out.println("方式三:" + intSummaryStatistics.getCount());
System.out.println("-------------------");
System.out.println("獲取流中 年齡最小的元素");
System.out.print("獲取最小方式一:");
list.stream().collect(Collectors.minBy(Comparator.comparingInt(Person::getAge))).ifPresent(System.out::println);
System.out.println("獲取最小方式二:" + intSummaryStatistics.getMin());
System.out.println("-------------------");
System.out.println("獲取流中 年齡最大的元素");
System.out.print("獲取最大方式一:");
list.stream().collect(Collectors.maxBy(Comparator.comparingInt(Person::getAge))).ifPresent(System.out::println);
System.out.println("獲取最大方式二:" + intSummaryStatistics.getMax());
System.out.println("-------------------");
//年齡平均數
Double average = list.stream().collect(Collectors.averagingInt(Person::getAge));
System.out.println("平均年齡方式一:" + average);
System.out.println("平均年齡方式二:" + intSummaryStatistics.getAverage());
System.out.println("-------------------");
System.out.println("年齡總和方式一:" + intSummaryStatistics.getSum());
Integer sum = list.stream().collect(Collectors.summingInt(Person::getAge));
System.out.println("年齡總和方式二:" + sum);
System.out.println("-------------------");
System.out.println("拼接所有人的性名");
String personNames = list.stream().map(Person::getName).collect(Collectors.joining(" "));
System.out.println("所有人的性名:" + personNames);
System.out.println("-------------------");
System.out.println("一級分組");
System.out.println("根據年齡分組");
Map<Integer, List<Person>> map = list.stream()
.collect(Collectors.groupingBy(Person::getAge));
System.out.println(map);
System.out.println("二級分組 先根據年齡分組 在根據xing'm'z");
Map<Integer, Map<String, List<Person>>> mapMap = list.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.groupingBy(Person::getName)));
System.out.println(mapMap);
System.out.println("-------------------");
System.out.println("分區 <30 , >=30");
Map<Boolean, List<Person>> listMap = list.stream()
.collect(Collectors.partitioningBy(person -> person.getAge() < 30));
System.out.println(listMap);
System.out.println("-------------------");
System.out.println("分區 <30 , >=30 後 >=30 這個分區再次分區 =30 和 >30");
Map<Boolean, Map<Boolean, List<Person>>> map1 = list.stream().collect(Collectors
.partitioningBy(person -> person.getAge() >= 30,
Collectors.partitioningBy(person -> person.getAge() == 30)));
System.out.println(map1);
System.out.println("--------------");
System.out.println("分區後統計數量");
Map<Boolean, Long> map2 = list.stream().collect(
Collectors.partitioningBy(person -> person.getAge() < 30, Collectors.counting()));
System.out.println(map2);
}
Stream.Collect 收集器的使用案例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.