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)));
}
输出结果为: