您的位置:

Java Stream操作简介

Java 8中,引入了Stream API,以便更好地管理集合数据。Stream API允许在一组元素上进行连续的、并行化的操作。在本文中,我们将介绍Java Stream API及其操作。

一、Stream API 的介绍

Stream 意味着“流”或“串”,是一种新的计算方式,和传统的Java集合相比,新的Java Stream API解决了之前集合处理过程中一些难以描述的问题,例如并行处理、及早的退出、按需计算等。

其中,Stream API挑选特定的元素并返回一系列元素。Stream API提供了各种各样的数据操作方法,例如map、filter、flatMap、peek、distinct、sorted、limit、skip等。这些方法允许有效地解决集合数据的操作。

二、Stream API的使用

1. 创建一个Stream

所有Stream API的操作都始于创建一个新的Stream对象。可以根据一个数组或集合创建Stream,并应用各种操作来过滤、拓展、转换和组合数据。

下面是使用Stream API创建一个数组流的示例:

String[] array = new String[]{"a", "b", "c", "d", "e"};
Stream<String> streamFromArray = Arrays.stream(array);

2. 常用的Stream操作方法

a) filter

filter 方法可用于创建一个只包含特定集合元素的新流。

例如下列示例,创建了一个新的Stream,只包含长度大于等于2的字符串:

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
Stream<String> stream = strings.stream();
Stream<String> filtered = stream.filter(s -> !s.isEmpty() && s.length() >= 2);
b) map

map方法可以创建一个新的Stream,其中的元素根据提供的Function接口转化成另一种类型。

例如下例中将每一个字符串转化成大写字符:

List<String> list = Stream.of("a", "b", "hello")
                       .map(String::toUpperCase)
                       .collect(Collectors.toList());
System.out.println(list);
c) reduce

reduce是一个折叠操作,将流中所有的元素累加到一起,并生成一个唯一的值。

下例中,reduce折叠串行流,将所有的数字加在一起:

OptionalInt reduced =
   IntStream.range(1, 10)
            .reduce((a, b) -> a + b);

三、结论

Java Stream API提供了一组强大的操作方法,支持对集合数据进行连续的、并行化的操作。简单却功能强大,使用Stream,可以使代码变得更为清晰、直观,并且具有一定的并行处理性能优势。