📜  java 8 流选项 - Java (1)

📅  最后修改于: 2023-12-03 15:01:28.218000             🧑  作者: Mango

Java 8 流选项

简介

Java 8 引入了新的流 API,使得我们更加便捷而高效地进行集合操作。流 API 提供了很多有用的选项,本文将会一一介绍。

延迟计算

流 API 中的集合操作是延迟计算的,只有当我们需要获得结果时才会执行计算。这样可以大大提高代码效率。

中间操作

中间操作是不会对集合进行任何修改的操作,而只是根据条件过滤、映射、排序等操作返回一个新的流。

常用的中间操作有:

filter

根据指定条件过滤集合中的元素。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().filter(e -> e > 3).forEach(System.out::println); // 输出 4 5
map

将集合中的元素映射成新的元素。例如:

List<String> list = Arrays.asList("Java", "C++", "Python", "PHP", "JavaScript");
list.stream().map(String::toLowerCase).forEach(System.out::println); // 输出 java c++ python php javascript
sorted

按照指定条件对集合中的元素排序。例如:

List<Integer> list = Arrays.asList(3, 1, 4, 2, 5);
list.stream().sorted().forEach(System.out::println); // 输出 1 2 3 4 5
distinct

去除集合中的重复元素。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 3);
list.stream().distinct().forEach(System.out::println); // 输出 1 2 3 4 5
limit

截断集合流,只返回前n个元素。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().limit(3).forEach(System.out::println); // 输出 1 2 3
skip

跳过集合流中的前n个元素。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().skip(3).forEach(System.out::println); // 输出 4 5
终端操作

终端操作是会对集合进行计算的操作,例如对集合元素求和、求平均值等。

常用的终端操作有:

forEach

对集合中的每个元素执行指定操作。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().forEach(System.out::println); // 输出 1 2 3 4 5
count

返回集合中元素的个数。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
long count = list.stream().count();
System.out.println(count); // 输出 5
reduce

对集合中的元素进行归约操作,例如求和、求最大值、求最小值等。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, Integer::sum);
System.out.println(sum); // 输出 15
collect

将集合中的元素转换为另一个集合。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> newList = list.stream().filter(e -> e > 3).collect(Collectors.toList());
newList.forEach(System.out::println); // 输出 4 5
总结

Java 8 流选项为我们提供了很多方便、高效的集合操作方法,可以大大提高我们的编码效率。同时使用流 API 还可以使得代码更加简洁易懂。