目录
Stream流中的结果到集合中
Stream流中的结果到数组中
对流中数据进行聚合计算
1. 获取最大值
2. 获取最小值
3. 求总和
4. 平均值
5. 统计数量
对流中数据进行分组
对流中数据进行多级分组
对流中数据进行分区
对流中数据进行拼接
Stream流中的结果到集合中
Stream流提供 collect 方法,其参数需要一个 java.util.stream.Collector<T,A, R> 接口对象来指定收集到哪种集合中
public static <T> Collector<T, ?, List<T>> toList() :转换为 List 集合。
public static <T> Collector<T, ?, Set<T>> toSet() :转换为 Set 集合。
// 将流中数据收集到集合中
@Test
public void testStreamToCollection() {
Stream<String> stream = Stream.of("a", "b", "c","d","e");
/*List<String> list = stream.collect(Collectors.toList());
Set<String> set = stream.collect(Collectors.toSet());*/
ArrayList<String> arrayList = stream.collect(Collectors.toCollection(ArrayList::new));
System.out.println(arrayList);
HashSet<String> hashSet = stream.collect(Collectors.toCollection(HashSet::new));
System.out.println(hashSet);
}
Stream流中的结果到数组中
Stream提供 toArray 方法来将结果放到一个数组中,返回值类型是Object[]的:
Object[] toArray();
@Test
public void testStreamToArray() {
Stream<String> stream = Stream.of("a", "b", "c","d","e");
String[] strings = stream.toArray(String[]::new);
for (String str : strings) {
System.out.println(str);
}
}
对流中数据进行聚合计算
当我们使用Stream流处理数据后,可以像数据库的聚合函数一样对某个字段进行操作。
例如:获取最大值,获取最小值,求总和,平均值,统计数量
1. 获取最大值
Stream<Student> studentStream = Stream.of(
new Student("小张", 58, 95),
new Student("小李", 56, 88),
new Student("小王", 56, 99),
new Student("小明", 52, 77));
// 获取最大值
Optional<Student> collect = studentStream.collect(Collectors.maxBy((o1, o2) ->o1.getScore() - o2.getScore()));
System.out.println(collect.get());
2. 获取最小值
Stream<Student> studentStream = Stream.of(
new Student("小张", 58, 95),
new Student("小李", 56, 88),
new Student("小王", 56, 99),
new Student("小明", 52, 77));
// 获取最小值
Optional<Student> collect = studentStream.collect(Collectors.minBy((o1, o2) ->o1.getScore() - o2.getScore()));
System.out.println(collect.get());
3. 求总和
Stream<Student> studentStream = Stream.of(
new Student("小张", 58, 95),
new Student("小李", 56, 88),
new Student("小王", 56, 99),
new Student("小明", 52, 77));
// 求总和
int sumAge = studentStream.collect(Collectors.summingInt(s -> s.getAge()));
System.out.println("sumAge = " + sumAge);
4. 平均值
Stream<Student> studentStream = Stream.of(
new Student("小张", 58, 95),
new Student("小李", 56, 88),
new Student("小王", 56, 99),
new Student("小明", 52, 77));
// 平均值
double avgScore = studentStream.collect(Collectors.averagingInt(s -> s.getScore()));
System.out.println("avgScore = " + avgScore);
5. 统计数量
Stream<Student> studentStream = Stream.of(
new Student("小张", 58, 95),
new Student("小李", 56, 88),
new Student("小王", 56, 99),
new Student("小明", 52, 77));
// 统计数量
Long count = studentStream.collect(Collectors.counting());
System.out.println("count = " + count);
对流中数据进行分组
当我们使用Stream流处理数据后,可以根据某个属性将数据分组
对流中数据进行多级分组
对流中数据进行分区
Collectors.partitioningBy 会根据值是否为true,把集合分割为两个列表,一个true列表,一个false列表。
对流中数据进行拼接
Collectors.joining 会根据指定的连接符,将所有元素连接成一个字符串。