Lambda实践
程序员文章站
2022-07-13 09:39:13
...
Lambda实践
1.引言
在java1.8之后,开始支持使用Lambda表达式,及函数式编程。极大地简化了代码。特别是在对List进行处理的时候,十分简洁和清爽。
2.常用的流
因为经常使用List进行操作,所以下面的示例也都已List作为demo
1.collect(Collectors.toList()):将流转换成一个List
2.filter():过滤List中符合条件的数据
3.map():将List进行一些转换
4.flap():将多个Stream合并成一个流
5.max()/min():获取集合中最大/最小值的对象
6.count():对集合执行统计
7.reduce():从一组值中生成一个值
8.averagingInt():获取平均值
下面贴代码,开始实践
1.新建一个学生类(推荐使用lombok,自动构建getter,setter,toString等方法)
@Data
@AllArgsConstructor
public class Student {
private String name;
private Integer age;
private Integer height;
}
2.测试类
public class LambdaTest {
public static void main(String[] args) {
// collect(Collectors.toList())
List<Student> students = Stream.of(new Student("鲁班七号", 18, 150), new Student("狄仁杰", 19, 170)
, new Student("虞姬", 20, 175)).collect(Collectors.toList());
System.out.println(students);
// filter
List<Student> filterList = students.stream().filter(student -> student.getAge() < 20).collect(Collectors.toList());
System.out.println("年龄小于20岁的集合:" + filterList);
// map
List<String> nameList = students.stream().map(student -> student.getName()).collect(Collectors.toList());
System.out.println("姓名集合为:" + nameList);
// flatMap
List<Student> students2 = Stream.of(new Student("孙尚香", 22, 165), new Student("后羿", 23, 180)).collect(Collectors.toList());
List<Student> flatStudents = Stream.of(students, students2).flatMap(students1 -> students1.stream()).collect(Collectors.toList());
System.out.println("两个student集合为:" + flatStudents);
//max min
Optional<Student> max = students.stream().max(Comparator.comparing(student -> student.getAge()));
Optional<Student> min = students.stream().min(Comparator.comparing(student -> student.getAge()));
if (max.isPresent()) {
// 最大的值不为空
System.out.println("max Age Student:" + max);
}
if (min.isPresent()) {
System.out.println("min Age student:" + min);
}
// count 一般结合filter使用
long count = students.stream().filter(student -> student.getAge()< 18).count();
System.out.println("count:" + count);
// reduce 可以从一组值中生成一个值
Integer reduce = Stream.of(1, 2, 3, 4, 5).reduce(0, (a, b) -> a + b);
System.out.println("reduce: " + reduce);
// 获取students中的平均年龄
Double avgAge = students.stream().collect(averagingInt(Student::getAge));
System.out.println("avgAge:" + avgAge);
}
}
3.看看打印结果
注:建议自己上手实践一遍,同时在工作中使用这个进行编程,熟能生巧,加油!
上一篇: zookeeper 实践
下一篇: nginx实现负载均衡