Java Stream用法汇总

本文深入探讨了Java Stream API中toMap方法的高级应用,特别是在结合Function.identity()时如何创建高效的Map集合。通过具体示例,读者将学会如何利用这一技巧简化代码并提高程序的可读性和性能。

收集一些遇到的、巧妙的Java Stream用法,多看,多学,多复习。

  1. toMap与Function.identity()
Map<Long, Measure> measureMap = 
	measures.stream().collect(
	Collectors.toMap(
		Measure::getId, Function.identity()));
### Java Stream API 汇总教程 #### 创建Stream Java中的Stream可以通过多种方式创建。最常见的方式是从集合类创建流,也可以从数组或者通过静态工厂方法`Stream.of()`来创建[^1]。 ```java List<String> list = Arrays.asList("a", "b", "c"); Stream<String> streamFromCollection = list.stream(); String[] array = {"d", "e", "f"}; Stream<String> streamFromArray = Stream.of(array); ``` #### 中间操作 中间操作是指那些返回新流的操作,它们本身不会触发实际的数据处理过程。常见的中间操作有: - `filter(Predicate)`:用于筛选符合条件的元素。 - `map(Function)`:将每个输入元素按照指定函数映射成新的形式。 - `flatMap(Function)`:先对每个元素应用一个函数,再把结果展平到一个新的流中[^2]。 ```java // 过滤长度大于3的字符串并将其转为大写 stream.filter(s -> s.length() > 3).map(String::toUpperCase) ``` #### 终端操作 终端操作会启动流的实际执行流程,并通常会产生某种类型的最终结果或副作用。一旦调用了任何终端操作之后就不能再次使用该流了。重要的终端操作包括但不限于: - `forEach(Consumer)`:遍历流中的每一个元素。 - `collect(Collector)`:收集流的结果至列表、集合或其他容器结构。 - `reduce(BinaryOperator)`:累积计算得到单个值作为结果。 ```java // 收集所有元素到列表 List<String> result = stream.collect(Collectors.toList()); // 计算整数流的最大值 Optional<Integer> max = integerStream.reduce(Integer::max); ``` #### 并行处理 除了顺序处理外,还可以利用多核处理器的优势来进行并行化处理。只需简单地调用`.parallel()`即可开启并行模式;而要恢复串行则可以调用`.sequential()`。 ```java list.parallelStream().forEach(System.out::println); // 并行打印 ``` #### 特殊情况下的优化建议 当面对大量数据时,应该考虑如何有效地减少不必要的内存占用以及提升性能表现。例如,在不需要整个序列的情况下尽早终止迭代(如findFirst),合理设置缓冲区大小等措施都能带来显著的效果改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值