Java 8引入了一个新的Stream API,它提供了一种更加简洁、灵活和高效的方式来处理集合数据。在本篇博客中,我们将介绍Java 8中Stream流常用的方法。

filter()方法

filter()方法是Stream流中最常用的方法之一。它接收一个Predicate函数式接口,用于过滤流中的元素。只有满足Predicate条件的元素才会被保留下来。例如:

List<String> list = Arrays.asList("apple", "banana", "cherry", "date");
Stream<String> stream = list.stream();
stream.filter(s -> s.startsWith("a")).forEach(System.out::println);

上面的代码将输出"apple",因为它是以"a"开头的字符串。

map()方法

map()方法可以将Stream流中的元素通过指定的函数式接口映射成另一种类型。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
stream.map(i -> i * 2).forEach(System.out::println);

上面的代码将输出2、4、6、8和10,因为它将列表中的每个整数都乘以2。

reduce()方法

reduce()方法可以将Stream流中的元素合并成一个结果。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
int sum = stream.reduce(0, (a, b) -> a + b);
System.out.println(sum);

上面的代码将输出15,因为它将列表中的每个整数相加。

collect()方法

collect()方法可以将Stream流中的元素收集到一个集合中。例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
List<Integer> evenNumbers = stream.filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(evenNumbers);

上面的代码将输出[2, 4],因为它只保留了列表中的偶数。

distinct()方法

distinct()方法可以去除Stream流中的重复元素。例如:

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

上面的代码将输出1、2、3、4和5,因为它去除了列表中的重复元素。

sorted()方法

如果需要对Stream流中的元素进行自定义排序,可以使用sorted()方法并传递一个Comparator对象作为参数。例如:

List<String> list = Arrays.asList("apple", "banana", "cherry", "date");
Stream<String> stream = list.stream();
stream.sorted((s1, s2) -> s1.length() - s2.length()).forEach(System.out::println);

上面的代码将输出"date"、"apple"、"banana"和"cherry",因为它将字符串按照长度升序排序。

flatMap()方法

flatMap()方法可以将多个Stream流合并成一个Stream流。例如:

List<List<Integer>> listOfLists = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
listOfLists.stream().flatMap(list -> list.stream()).forEach(System.out::println);

上面的代码将输出1、2、3、4、5、6、7、8和9,因为它将多个整数列表合并成了一个整数Stream流。

limit()方法和skip()方法

limit()方法可以限制Stream流中元素的数量。例如:

Stream.iterate(0, i -> i + 1).limit(10).forEach(System.out::println);

上面的代码将输出0、1、2、3、4、5、6、7、8和9,因为它只保留了前10个元素。

skip()方法可以跳过Stream流中的前几个元素。例如:

Stream.iterate(0, i -> i + 1).skip(5).limit(5).forEach(System.out::println);

上面的代码将输出5、6、7、8和9,因为它跳过了前5个元素并保留了接下来的5个元素。

以上就是Java 8中Stream流常用的方法。使用这些方法可以更加简单、灵活和高效地处理集合数据。