java8 Lambda表达式详解
来源:互联网 发布:数据库与区块链对比 编辑:程序博客网 时间:2024/05/16 10:59
对象:Stream 集合可用用生成一个流。
特性:保持有序性。可以对数据进行排序、筛选、截断等操作。
注意:流的使用只能一次性消费。
例如: List<String> title = Arrays.asList("Java8", "In", "Action");
Stream<String> s = title.stream();
s.forEach(System.out::println);
s.forEach(s -> s.); // 此处将抛出异常
流的中间操作:
方法:filter 用于接收一个Lambda 参数
例如:(a -> a%2 == 0) 或者 Class.method
注意:filter参数只能接收一个Boolean参数
方法:map 用于筛选流中数据但和filter不同map也是接收一个Lambda参数但是参数返回可以是任意类型数据
例如:(a -> a.getMethod) 或者 Class.method
注意:map需要一个Lambda参数。值得注意的是,map中返回的参数类型决定了整个流的结束时返回的数据类型。如果有多个map返回值都不一致,则取最后一个map的值作为最终的map返回值。
方法:limit方法用于截断流,也称短路。接收一个long类型的数据。
例如:s.limit(n)
注意:设置limit方法后,流只会检查小于limit设置参数的那一部分,从那一部分提取数据,如果无数据返回空流。
方法:skip(n) 方法用于跳过流中n个元素,从第n个元素开始。
例如:s.skip(2) 流将从第二个元素开始执行
注意:设置limit方法后,流只会检查大于skip设置参数的那一部分,从那一部分提取数据,如果无数据返回空流。
方法: flatmap个人理解就是将流计算数据合并。参数Lambda表达式。
例如:List<Integer> numbers1 = Arrays.asList(1, 2, 3);
List<Integer> numbers2 = Arrays.asList(3, 4);
numbers1.stream().flatMap(i -> numbers2.stream().map(j -> new int[]{i * j})).collect(toList());
注意: 在flatmap 中可以加入无限制的流中间操作例如在 flatmap中再次加入过滤条件是否能被3整除:
numbers1.stream().flatMap(i -> numbers2.stream().filter(j -> (i + j) % 3 == 0).map(j -> new int[]{i * j})).collect(toList());
方法:sorted方法用于给数据排序。接收参数为:comparing(Dish::getCalories)
例如:sorted(comparing(Dish::getCalories).reversed()) 倒叙 去掉.reversed() 为正序
注意:默认正序
方法:distinct 用于去除流中重复数据。无参数
例如:distinct()
注意:无
流的终端操作:
方法: forEach 循环数据。接收一个Lambda参数,这一操作返回void
例如: forEach(System.out::println) 或者 forEach(i -> i.equals("red"))
注意: 使用此方法会中断流,并且流开始计算之前在流中加入的各种操作。
方法: count 用于统计使用。返回流中元素的个数。这一操作返回long
例如: count()
注意: 此操作也会中断流操作。
方法: collect 用于把流归纳成集合。比如List、Map 甚至是Integer
例如: collect(toList()) 或者 collect(toSet())
注意: 此操作也会中断流操作。
方法: anyMatch 审查流中的数据是否包含于某个值,返回值为Boolean,参数为Lambda表达式。
例如: s.anyMatch(n ->"Java8".equals(n))
注意: 此方法只能接收Lambda 表达式返回结果为 Boolean类型,并且该方法有返回值因此为一个终端操作。
方法: allMatch 审查流中的所有数据是否包含于某个值,返回值为Boolean,参数为Lambda表达式。
例如: s.allMatch(n ->"Java8".equals(n))
注意: 此方法只能接收Lambda 表达式返回结果为 Boolean类型,并且该方法有返回值因此为一个终端操作。
方法: noneMatch 审查流中的所有数据是不否包含于某个值,返回值为Boolean,参数为Lambda表达式。
例如: s.noneMatch(n ->"Java8".equals(n))
注意: 此方法只能接收Lambda 表达式返回结果为 Boolean类型,并且该方法有返回值因此为一个终端操作。
方法: findAny 返回查找到的流中任意元素,参数无,一般配合filter使用。
例如: filter(a -> a%2 == 0).findAny(); 流结束。
注意: 如果无结果,返回空流,如果多个返回查找到的第一个。如果存在返回 Optional 对象(后面有说明)
方法: reduce 把一个流中的元素组合起来进行计算。返回计算结果,参数为lambda表达式。
例如: reduce(0, Integer::max);
注意: 只能接收数字组成的流进行计算。否则抛出异常
注: 所有终端操作不可作用在同一个流上。 中间操作可以无限制使用。Lambda表达式为一部分,如果有不正确的欢迎指正。
完整例子:
List<Dish> list= Dish.menu;
System.out.println(list.stream().filter(dish -> dish.getCalories() < 400).sorted(comparing(Dish::getCalories)).map(dish -> dish.getCalories()).limit(1).collect(toList()));
1 0
- java8 Lambda表达式详解
- Java8 Lambda表达式详解
- java8 lambda表达式详解(一)
- java8 lambda表达式详解(二)
- Java8之lambda表达式详解
- Java8 新特性 lambda表达式详解
- 详解Java8特性之Lambda表达式
- java8新特性 Lambda表达式详解
- Java8特性详解 lambda表达式和StreamAPI
- JAVA8之lambda表达式详解,及stream中的lambda使用
- JAVA8之lambda表达式详解,及stream中的lambda使用
- JAVA8之lambda表达式详解,及stream中的lambda使用
- JAVA8之lambda表达式详解,及stream中的lambda使用
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8: Lambda表达式语法
- java8 Lambda表达式
- Java8 Lambda表达式教程
- python 安装 paramiko
- Spring @responsebody返回json字符串乱码 or 请求406
- Using Alamofire from Objective-C
- 在线申贷前端后台实现二(插入数据库)
- 项目经理必备7要素
- java8 Lambda表达式详解
- 欢迎使用CSDN-markdown编辑器
- Android动画之AlphaAnimation
- 对javav的一些起源认识!
- 操作系统Unix、Windows、Mac OS、Linux的故事 科普篇
- consul服务发现入门篇
- WebApi在MVC 4中一个Controll多个post方法报错处理
- cuda优化相关参数总结
- 【63.73%】【codeforces 560A】Currency System in Geraldion