📅  最后修改于: 2023-12-03 15:31:35.475000             🧑  作者: Mango
Java8 Stream API是Java8新引入的一种处理集合数据的方式,它提供了强大的功能,使得我们能够以一种声明式的方式来操作集合数据并完成相关的处理。它可以处理大量的数据,而无需使用for循环或者其他迭代方式,同时也提供了并行处理的能力,从而保证了高效率的数据处理。
我们只列出常见的几个中间操作。
<R> Stream<R> map(Function<? super T, ? extends R> mapper)
对Stream中的每个元素应用函数mapper,返回一个新的Stream。
示例代码:
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squareNums = nums.stream()
.map(n -> n * n)
.collect(Collectors.toList());
Stream<T> filter(Predicate<? super T> predicate)
对Stream中的每个元素应用一定的谓词条件,返回一个仅包含符合条件的元素的新Stream。
示例代码:
List<String> strings = Arrays.asList("abc", "", "bcd", "", "defg", "jk");
long count = strings.stream()
.filter(str -> str.length() == 3)
.count();
Stream<T> sorted([Comparator<? Super T> comparator])
返回一个根据指定的Comparator排序后的新Stream。
示例代码:
List<Integer> nums = Arrays.asList(5, 1, 3, 2, 4);
List<Integer> sortedNums = nums.stream()
.sorted()
.collect(Collectors.toList());
Stream<T> distinct()
返回一个新的Stream,其中包含排重过后的相同元素集合。
示例代码:
List<Integer> nums = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
List<Integer> distinctNums = nums.stream()
.distinct()
.collect(Collectors.toList());
我们只列出常见的几个终止操作。
void forEach(Consumer<? super T> action)
对Stream中的每个元素执行给定的操作,该操作不返回任何结果。
示例代码:
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
nums.stream().forEach(n -> System.out.print(n + " "));
long count()
返回Stream中元素的个数。
示例代码:
List<String> strings = Arrays.asList("abc", "", "bcd", "", "defg", "jk");
long count = strings.stream()
.filter(str -> str.length() == 3)
.count();
<R> R collect(Collector<? super T, A, R> collector)
对Stream中的所有元素执行给定的操作,该操作将元素收集到给定类型的结果中。
示例代码:
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> collect = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
Java8 Stream API是一个强大的操作集合数据的工具,它使用声明式的方式来处理数据,并支持并行处理。使用Stream操作,可以让代码更加简洁,同时也可以提升执行效率。 熟练掌握这些常见的中间操作和终止操作,对提高我们的编程效率很有帮助。