发布于2021-06-12 14:54 阅读(658) 评论(0) 点赞(9) 收藏(4)
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
(parameters) -> expression
或
(parameters) ->{ statements; }
// 此处 new ArrayList<Integer>() 仅用于表示一个Integer的list
// forEach可以接收一个lambda表达式作为参数,并遍历list每个元素执行这个表达式的内容
new ArrayList<Integer>().forEach((x) -> {
// x 被自动识别为Integer类型
System.out.println(x);
});
// 上段示例可省略参数的小括号
new ArrayList<Integer>().forEach(x -> {
System.out.println(x);
});
// 上段示例可省略大括号
new ArrayList<Integer>().forEach(x -> System.out.println(x));
new ArrayList<Integer>().stream().map(x -> x * 2);
// 等价于
new ArrayList<Integer>().stream().map(x -> {
return x * 2;
});
final int y = 0;
new ArrayList<Integer>().forEach(x -> {
System.out.println(x + y);
// 将x的值赋给
});
int y = 0;
new ArrayList<Integer>().forEach(x -> {
System.out.println(x + y);
});
// y值被修改时编译报错
// y = 1;
int x = 0;
// 表达式内变量x编译报错
// new ArrayList<Integer>().forEach(x -> System.out.println(x));
Stream(流)是一个来自数据源的元素队列并支持聚合操作
- 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
- 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
- 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。
和以前的Collection操作不同, Stream操作还有两个基础的特征:
- Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
- 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
stream() - 为集合创建串行流
parallelStream() - 为集合创建并行流
map() - 用于映射每个元素到对应的结果
filter() - 用于通过设置的条件过滤出元素
sorted() - 用于对流进行排序
limit() - 用于获取指定数量的流
forEach() - 迭代流中的每个数据
collect() - 实现了很多归约操作,例如将流转换成集合和聚合元素
getMax()、getMin()、getSum()、getAverage() - 产生统计结果的收集器,主要用于int、double、long等基本类型上
List<String> list = Arrays.asList("123", "abc");
// 为集合创建串行流
list.stream()
// 映射每个元素到对应的结果,转为大写
.map(String::toUpperCase)
// 通过设置的条件过滤出元素,字符串长度为3
.filter(string -> string.length() == 3)
// 迭代流中的每个数据,打印元素
.forEach(System.out::println);
// 创建IntStream
new Random().ints()
// 转换成Stream<String>
.mapToObj(Integer::toString)
// 获取指定数量的流, 10个
.limit(10)
// 对流进行默认排序
.sorted()
// 将流转换成map,toMap三个参数分别表示map的key生成方式、value生成方式、key冲突时value解决方式
.collect(Collectors.toMap(key -> key, value -> value, (value1, value2) -> value1));
原文链接:https://blog.csdn.net/shepherd_dirk/article/details/117667571
作者:java小王子
链接:http://www.javaheidong.com/blog/article/222423/5ecf5e6eb6a2c6e324c1/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!