📅  最后修改于: 2023-12-03 15:22:25.279000             🧑  作者: Mango
在 Java 8 中,流 (Stream) 是一种处理集合数据的新方式。它们提供了一种更简洁、更易于理解和并行处理数据的方式。流可以被看作是一种高级 Iterator,它能够提供聚合函数,使得数据的处理变得更加容易。
在使用流时,第一步是将集合转换成流。可以通过集合的 stream() 方法来实现,如下所示:
List<String> names = Arrays.asList("John", "Jane", "Adam", "Tom");
Stream<String> stream = names.stream();
紧接着,就可以使用流的各种操作来处理数据。流的操作可以分为中间操作和终端操作。中间操作是指一组返回流的操作,终端操作是指一个返回非流的结果的操作。
中间操作包括筛选、映射、排序等操作,它们返回的结果还是一个流。终端操作包括汇总、归约、计数、查找等操作,它们返回结果不再是一个流。
List<String> names = Arrays.asList("John", "Jane", "Adam", "Tom");
long count = names.stream().filter(name -> name.startsWith("J")).count();
System.out.println(count); // 输出 2
在上面的示例中,我们使用流的 filter() 方法筛选以字母 "J" 开头的字符串,并使用 count() 方法来计算符合条件的字符串个数。
流的映射操作可以将流中的每个元素转换成另一个元素。在 Java 8 中,流提供了三种映射操作:map()、flatMap() 和 mapToInt(),它们分别适用于不同类型的数据。
map() 操作会将流中每个元素按照给定的函数进行转换,将每个新的元素存储到一个新的流中。例如,假设有以下集合:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
如果我们希望将每个元素都加上一倍,可以使用 map() 操作:
List<Integer> result = numbers.stream().map(num -> num * 2).collect(Collectors.toList());
System.out.println(result);
输出结果为:
[2, 4, 6, 8, 10]
flatMap() 操作与 map() 操作类似,但是它返回的是一个扁平化的流 (flat stream)。如果 map() 操作返回的是一个元素流 (element stream),那么 flatMap() 操作返回的是一个扁平的值流 (value stream),也就是将所有元素拍平之后得到的流。
例如,假设有以下集合:
List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6));
如果我们希望将所有元素拍平,并且将每个元素都加上一倍,可以使用 flatMap() 和 map() 操作:
List<Integer> result = numbers.stream().flatMap(list -> list.stream().map(num -> num * 2)).collect(Collectors.toList());
System.out.println(result);
输出结果为:
[2, 4, 6, 8, 10, 12]
mapToInt() 操作是一种特殊的 map() 操作,它用于将流中的元素转换为 int 类型。这个操作非常适用于数值型操作,因为它可以避免自动装箱和拆箱操作,从而提高效率。
例如,假设有以下集合:
List<String> numbers = Arrays.asList("1", "2", "3", "4", "5");
如果我们希望将每个元素都转换为 int 类型,并计算它们的和,可以使用 mapToInt() 和 sum() 操作:
int sum = numbers.stream().mapToInt(Integer::parseInt).sum();
System.out.println(sum);
输出结果为:
15
在 Java 8 中,流成为了一种强大的集合数据处理方式。使用流可以让代码变得更简洁、更易于理解,并且可以提供更好的并行处理能力。映射操作是流中的一种重要操作,它可以将流中的元素进行转换,使数据处理更加方便。在实际应用中,我们应该根据具体的需求选择不同的映射操作,以获得更好的性能和效果。