List<Student> students = Arrays.asList(
new Student(1,"zhangsan","class1",18,60),
new Student(2,"lisi","class1",20,59),
new Student(3,"wangwu","class2",18,100),
new Student(4,"wangwu","class2",16,100),
new Student(5,"wangwu","class2",22,100),
new Student(6,"zhaoliu","class2",18,80));
*toList List<T> 把流中元素收集到List
* toSet Set<T> 把流中元素收集到Set
* toCollection Collection<T> 把流中元素收集到建立的集合
* counting Long 計算流中元素的個數
* summingInt Integer 對流中元素的整數屬性求和
* averagingInt Double 計算流中元素Integer屬性的平均值
* summarizingInt IntSummaryStatistics 收集流中Integer屬性的統計值。
* joining String 連接配接流中每個字元串
* maxBy Optional<T> 根據比較器選擇最大值
* minBy Optional<T> 根據比較器選擇最小值
* reducing 歸約産生的類型 從一個作為累加器的初始值
* 開始,利用BinaryOperator與流中元素逐個結合,進而歸約成單個值
* inttotal=list.stream().collect(Collectors.reducing(0, Employee::getSalar, Integer::sum));
* collectingAndThen 轉換函數傳回的類型 包裹另一個收集器,對其結果轉換函數
* groupingBy Map<K, List<T>> 根據某屬性值對流分組,屬性為K,結果為V
* partitioningBy Map<Boolean, List<T>> 根據true或false進行分區
@Test
public void test7(){
List<String> list = students.stream().map(Student::getName).collect(Collectors.toList());
System.out.println(list);
students.stream().map(Student::getGrade).collect(Collectors.toCollection(ArrayList::new));
//counting
Long count = students.stream().collect(Collectors.counting());
System.out.println(count);
//averagingInt
System.out.println(students.stream().collect(Collectors.averagingInt(Student::getGrade)));
//groupingBy
System.out.println(students.stream().collect(Collectors.groupingBy(e->e.getClazz())));
//joining
System.out.println(students.stream().map(Student::getName).collect(Collectors.joining("--","begin","end")));
//collectingAndThen
Integer size = students.stream().collect(Collectors.collectingAndThen(Collectors.toList(), List::size));
System.out.println(size);
//reducing
System.out.println(students.stream().map(Student::getGrade).collect(Collectors.reducing(Integer::sum)));
}
輸出結果為: