您的位置:

Java8 Stream操作指南

Java8引入了新的Stream API,提供了很多便捷的操作来处理集合和数组等数据结构。Stream API提供了一种简单易用的方法来操作数据,可以使代码更加优雅和可读。在本篇文章中,我们将会介绍Java8 Stream API的各个方面。

一、创建Stream

Java8中可以使用Stream.of()创建Stream。以下是一个字符串数组的例子:

String[] strArr = {"hello", "world", "java", "stream"};
Stream<String> strStream = Stream.of(strArr);

也可以使用Arrays.stream()方法来创建Stream。下面的例子演示了如何创建一个整型数组的Stream:

int[] intArr = {1, 2, 3, 4};
IntStream intStream = Arrays.stream(intArr);

还可以使用Stream.generate()和Stream.iterate()方法来创建无限的Stream,这些方法中需要提供一个lambda表达式来生成无限的元素。下面的例子演示了如何使用Stream.generate()方法来生成一个由Java随机数组成的Stream:

Stream<Double> randomStream = Stream.generate(Math::random);

二、中间操作

Stream API提供了一些中间操作来处理Stream中的元素,这些操作会返回一个新的Stream。下面是一些常用的中间操作:

1. filter()

filter()方法用来过滤Stream中的元素,接收一个lambda表达式作为参数,lambda表达式返回一个boolean值。

Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
Stream<String> newStream = strStream.filter(str -> str.length() > 4);

上述代码会过滤掉长度小于等于4的元素,只会保留长度大于4的元素。

2. map()

map()方法用来对Stream中的每个元素进行映射,接收一个lambda表达式作为参数,lambda表达式必须返回一个新的元素。

Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
Stream<Integer> newStream = strStream.map(str -> str.length());

上述代码将Stream中每个元素映射成其长度,返回一个新的Integer类型的Stream。

3. distinct()

distinct()方法用来去重,即返回一个没有重复元素的新Stream。

Stream<String> strStream = Stream.of("hello", "world", "hello");
Stream<String> newStream = strStream.distinct();

上述代码会去重,只保留一个“hello”元素。

4. sorted()

sorted()方法用来对Stream中的元素进行排序,接收一个Comparator作为参数,如果没有提供Comparator,则会使用元素默认的自然排序。

Stream<String> strStream = Stream.of("world", "java", "hello", "stream");
Stream<String> newStream = strStream.sorted();

上述代码会对Stream中的元素进行从小到大的排序。

5. limit()

limit()方法用来取Stream中的前N个元素,其中N由参数决定。

Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
Stream<String> newStream = strStream.limit(2);

上述代码返回一个包含前两个元素的新Stream。

三、终止操作

Stream API提供了一些终止操作来对Stream最终的结果进行处理,这些操作会返回一个特定类型的值或void。下面是一些常用的终止操作:

1. forEach()

forEach()方法用来遍历Stream中所有的元素,接收一个lambda表达式作为参数,该lambda表达式用来对每个元素进行操作。

Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
strStream.forEach(str -> System.out.println(str));

上述代码会输出所有的元素。

2. collect()

collect()方法用来将Stream中的所有元素收集到一个集合中,接收一个Collector作为参数,该Collector用来定义集合的类型和如何将元素加入集合中。

Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
List<String> strList = strStream.collect(Collectors.toList());

上述代码会将Stream中的元素收集到一个List中。

3. reduce()

reduce()方法用来将Stream中的所有元素合并起来,接收一个BinaryOperator作为参数,BinaryOperator用来定义合并操作。

Stream<Integer> intStream = Stream.of(1, 2, 3, 4);
int sumResult = intStream.reduce(0, (a, b) -> a + b);

上述代码会将Stream中的所有元素相加,返回一个整型的结果。

四、总结

Java8 Stream是一个强大而优雅的API,这使得Java更灵活和易于处理数据。通过使用Stream API,我们可以更好地组织和操作集合和数组等数据结构。不仅减少了代码量,使代码更简洁,同时提高了代码执行效率。