Java API
Java API
ShioJava API
Stream流
流收集合
//流转化为集合 |
Java Stream API 提供了多种方法将流(Stream)转换为不同的集合类型、数组,以及进行聚合计算和复杂的数据操作。以下是一些常用的 Stream 操作的总结,包括代码示例和注释:
1. 流转换为集合
List
List<String> list = stream.collect(Collectors.toList());
将流收集到一个列表中。
Set
Set<String> set = stream.collect(Collectors.toSet());
将流收集到一个集合中,自动去除重复元素。
Map
Map<String, Fruit> fruitMap = fruits.stream() |
自定义集合
Collection<String> collection = stream.collect(Collectors.toCollection(ArrayList::new));
将流收集到一个由提供 Supplier 函数指定的集合中。
2. 流转换为数组
Object 数组
Object[] array = stream.toArray();
将流转换为 Object 数组。
特定类型数组
int[] intArray = stream.mapToInt(String::length).toArray();
将流转换为特定类型的数组,需要流的中间操作以确定数组的类型。
3. 聚合计算
最大值
Optional<String> max = stream.collect(Collectors.maxBy(Comparator.naturalOrder()));
找出流中的最大元素。
最小值
Optional<String> min = stream.collect(Collectors.minBy(Comparator.naturalOrder()));
找出流中的最小元素。
计数
long count = stream.collect(Collectors.counting());
计算流中元素的数量。
求和
int sum = stream.collect(Collectors.summingInt(String::length));
对流中的元素进行求和,适用于数字类型的流。
平均值
double average = stream.collect(Collectors.averagingInt(String::length));
计算流中元素的平均值。
4. 分组
GroupingBy
Map<String, List<String>> groupedByLength = stream.collect(Collectors.groupingBy(String::length));
按元素的某种属性将流分组。
5. 分区
PartitionBy
Map<Boolean, List<String>> partitioned = stream.collect(Collectors.partitioningBy(s -> s.startsWith("A")));
根据谓词将流分为两部分。
6. 拼接
Joining
String joinedString = stream.collect(Collectors.joining(", "));
将流中的元素拼接成一个字符串。
注意事项
- 每个
collect
操作都会消费流,因此一个流只能进行一次终端操作,除非使用peek
或者forEach
进行中间操作。 toArray
方法有几个重载版本,可以创建任何对象类型或原始类型的数组。Collectors
类提供了多种收集器,可以进行复杂的数据转换和聚合操作。- 一些操作如
groupingBy
和partitioningBy
可以与downstream
结合使用,以对分组或分区后的流进行进一步的收集操作。
示例
import java.util.Arrays; |
评论
匿名评论隐私政策