ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java8 Lambda

2020-04-29 21:52:01  阅读:302  来源: 互联网

标签:name Collectors sex collect studentList Student Java8 Lambda


流 lambda 的使用

@Data
@Builder
public class Student {

    private String name;
    private Integer sex;
    private Integer age;
}
// 构建一个学生和课程成绩的关系,来测试lambda表达式                                                                                                                                      
List<Student> studentList = new ArrayList<>();                                                                                                                      
studentList.add(Student.builder().name("aa").age(11).sex(1).build());                                                                                               
studentList.add(Student.builder().name("bb").age(12).sex(0).build());                                                                                               
studentList.add(Student.builder().name("cc").age(10).sex(1).build());                                                                                               
studentList.add(Student.builder().name("dd").age(12).sex(0).build());                                                                                               
studentList.add(Student.builder().name("ee").age(12).sex(1).build());                                                                                               
studentList.add(Student.builder().name("ff").age(10).sex(0).build());                                                                                               
studentList.add(Student.builder().name("gg").age(11).sex(1).build());                                                                                               
studentList.add(Student.builder().name("hh").age(13).sex(1).build());                                                                                               
studentList.add(Student.builder().name("ii").age(12).sex(0).build());                                                                                               
studentList.add(Student.builder().name("jj").age(11).sex(0).build());                                                                                               
                                                                                                                                                                    
// 计算年龄最大的学生                                                                                                                                                        
Student ageMax = studentList.stream().max(Comparator.comparing(Student::getAge)).get();                                                                             
System.out.println("年龄最大的学生为:" + ageMax.getName() + " 年龄为:" + ageMax.getAge());                                                                                     
// 计算年龄最小的学生                                                                                                                                                        
Student ageMin = studentList.stream().min(Comparator.comparing(Student::getAge)).get();                                                                             
System.out.println("年龄最小的学生为:" + ageMin.getName() + " 年龄为:" + ageMax.getAge());                                                                                     
// 年龄大于10岁的学生的数量                                                                                                                                                    
long gt10 = studentList.stream().filter(s -> s.getAge() > 10).count();                                                                                              
System.out.println("年龄大于10岁的学生的数量:" + gt10);                                                                                                                        
// 每一个年龄段的学生的数量                                                                                                                                                     
Map<Integer, Long> collect = studentList.stream().collect(Collectors.groupingBy(Student::getAge, Collectors.counting()));                                           
System.out.println("每个年龄段的学生的数量:" + collect);                                                                                                                       
// 将学生按照性别分组                                                                                                                                                        
Map<Integer, List<Student>> collect1 = studentList.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.toList()));                                   
System.out.println("将学生按照性别分组" + collect1);                                                                                                                         
// 将学生按照性别分组后 只获取学生的姓名                                                                                                                                              
Map<Integer, Set<String>> collect2 = studentList.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.mapping(Student::getName, Collectors.toSet())));
System.out.println("将学生按照性别分组后,只取学生的姓名:" + collect2);                                                                                                               
// 对所有的学生年龄+1                                                                                                                                                       
List<Student> collect3 = studentList.stream().map(s -> {                                                                                                            
    s.setAge(s.getAge() + 1);                                                                                                                                       
    return s;                                                                                                                                                       
}).collect(Collectors.toList());                                                                                                                                    
System.out.println("将所有学生年龄+1:" + collect3);                                                                                                                        
// 将学生按照年龄进行排序                                                                                                                                                      
List<Student> sorted = studentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());                                             
System.out.println("将学生按照年龄进行排序:" + sorted);                                                                                                                        
// reduce 操作 将集合中的元素求和                                                                                                                                              
Optional<Integer> total = Stream.of(1, 2, 3, 4, 5).reduce((x, y) -> x + y);                                                                                         
Integer total2 = Stream.of(1, 2, 3, 4, 5).reduce(0, (x, y) -> x + y);                                                                                               
// 将 List 转为 Map                                                                                                                                                    
List<Integer> collect4 = Stream.of(1, 2, 3, 4).collect(Collectors.toList());                                                                                        
Map<Integer, Integer> collect5 = collect4.stream().collect(Collectors.toMap(x -> x, x -> x + 1, (x, y) -> y));                                                      
System.out.println("list 转 Map:" + collect5);                                                                                                                       

Collectors 类的静态工厂方法。

工厂方法 返回类型 作用
toList List 把流中所有项目收集到一个 List
toSet Set 把流中所有项目收集到一个 Set,删除重复项
toCollection Collection 把流中所有项目收集到给定的供应源创建的集合menuStream.collect(toCollection(), ArrayList::new)
counting Long 计算流中元素的个数
sumInt Integer 对流中项目的一个整数属性求和
averagingInt Double 计算流中项目 Integer 属性的平均值
summarizingInt IntSummaryStatistics 收集关于流中项目 Integer 属性的统计值,例如最大、最小、 总和与平均值
joining String 连接对流中每个项目调用 toString 方法所生成的字符串collect(joining(", "))
maxBy Optional 一个包裹了流中按照给定比较器选出的最大元素的 Optional, 或如果流为空则为 Optional.empty()
minBy Optional 一个包裹了流中按照给定比较器选出的最小元素的 Optional, 或如果流为空则为 Optional.empty()
reducing 归约操作产生的类型 从一个作为累加器的初始值开始,利用 BinaryOperator 与流 中的元素逐个结合,从而将流归约为单个值累加int totalCalories = menuStream.collect(reducing(0, Dish::getCalories, Integer::sum));
collectingAndThen 转换函数返回的类型 包裹另一个收集器,对其结果应用转换函数int howManyDishes = menuStream.collect(collectingAndThen(toList(), List::size))
groupingBy Map<K, List> 根据项目的一个属性的值对流中的项目作问组,并将属性值作 为结果 Map 的键
partitioningBy Map<Boolean,List> 根据对流中每个项目应用谓词的结果来对项目进行分区

标签:name,Collectors,sex,collect,studentList,Student,Java8,Lambda
来源: https://www.cnblogs.com/iFanLiwei/p/12805090.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有