Java 8 引入了 Stream API,它是一种新的抽象概念,用于以更简洁、更具表现力的方式处理集合和数组数据。本文将详细介绍 Java 8 中 Stream 的常用操作,并提供多个示例代码,帮助您更好地理解和使用 Stream。
Stream 是 Java 8 引入的一个功能强大的数据处理工具,它提供了一种函数式编程的方式来操作集合和数组数据。Stream 可以支持各种数据处理操作,如过滤、映射、排序、聚合等。
在使用 Stream 前,需要先将数据源转换为 Stream 对象。常见的创建 Stream 的方式有以下几种:
stream()
方法创建 Stream。Arrays.stream()
方法创建 Stream。Stream.of()
方法创建 Stream。Stream.builder()
方法手动构建 Stream。过滤操作用于根据指定的条件过滤出满足条件的元素。常用的过滤操作有 filter()
和 distinct()
。
映射操作用于将每个元素映射为另一个元素。常用的映射操作有 map()
和 flatMap()
。
排序操作用于对元素进行排序。常用的排序操作有 sorted()
。
聚合操作用于对元素进行统计或计算。常用的聚合操作有 count()
、sum()
、min()
、max()
和 average()
。
匹配操作用
于判断流中的元素是否满足指定条件。常用的匹配操作有 anyMatch()
、allMatch()
和 noneMatch()
。
截断操作用于对流进行截断,获取指定数量的元素。常用的截断操作有 findFirst()
和 limit()
。
终端操作用于触发流的计算,并生成最终结果。常用的终端操作有 forEach()
、collect()
、count()
和 reduce()
。
forEach 用于对流中的每个元素执行指定的操作。
collect 用于将流中的元素收集到一个集合或其他数据结构中。除了 Java 集合类提供的收集器外,我们还可以使用 Collections 类中的一些方法进行收集。
Java 提供的 Collections 类中的一些方法可以方便地对 Stream 的元素进行收集,例如:
toList()
:将流中的元素收集到 List 中。toSet()
:将流中的元素收集到 Set 中。toMap()
:将流中的元素收集到 Map 中。下面是使用 Collections 的方法进行收集的示例代码:
List<Integer> result1 = list.stream()
.filter(element -> element > 0)
.collect(Collectors.toList());
Set<Integer> result2 = list.stream()
.filter(element -> element > 0)
.collect(Collectors.toSet());
Map<Integer, String> result3 = list.stream()
.collect(Collectors.toMap(
element -> element,
element -> String.valueOf(element),
(v1, v2)-> v1
));
Stream 提供了一种简洁、可读性强的数据处理方式,但它也有一些优缺点和适用场景。
优点:
缺点:
适用场景:
下面是一些示例代码,演示了 Stream 的常用操作的使用:
操作示例
List<Integer> result = list.stream()
.filter(element -> element > 0)
.collect(Collectors.toList());
List<String> result = list.stream()
.map(String::valueOf)
.collect(Collectors.toList());
List<Integer> result = list.stream()
.sorted()
.collect(Collectors.toList());
long count = list.stream()
.count();
int sum = list.stream()
.mapToInt(Integer::intValue)
.sum();
OptionalInt max = list.stream()
.mapToInt(Integer::intValue)
.max();
boolean anyMatch = list.stream()
.anyMatch(element -> element > 0);
boolean allMatch = list.stream()
.allMatch(element -> element > 0);
boolean noneMatch = list.stream()
.noneMatch(element -> element > 0);
Optional<Integer> first = list.stream()
.findFirst();
List<Integer> result = list.stream()
.limit(5)
.collect(Collectors.toList());
本文详细介绍了 Java 8 中 Stream 的常用操作和终端操作,以及使用 Collections 的方法进行收集。同时,分析了 Stream 的优缺点和适用场景。通过学习和掌握这些操作,您可以更加高效和便捷地处理集合和数组数据。