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,可以使代码变得更为清晰、直观,并且具有一定的并行处理性能优势。