Java中常用的函数式编程库——Stream API
Java中的Stream API是从Java 8开始引入的函数式编程库。它提供了一种轻松而高效的方式来处理集合中的元素。Stream API由一系列操作构成,包括中间操作和终端操作。中间操作用于处理数据流中的元素,产生新的流,而终端操作则用于产生最终结果。
一、中间操作
1、filter() 过滤操作
该操作用于从数据流中过滤出满足某个条件的元素,产生新的流。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
.filter(i -> i % 2 == 0)
.forEach(System.out::println);
输出结果:2,4
2、map() 映射操作
该操作用于将数据流中的每个元素转换为另一个元素,产生新的流。
例如:
List<String> list = Arrays.asList("java", "python", "c++");
list.stream()
.map(s -> s.toUpperCase())
.forEach(System.out::println);
输出结果:JAVA, PYTHON, C++
3、sorted() 排序操作
该操作用于对数据流中的元素进行排序,产生新的流。
例如:
List<Integer> list = Arrays.asList(3, 2, 1, 5, 4);
list.stream()
.sorted()
.forEach(System.out::println);
输出结果:1,2,3,4,5
4、distinct() 去重操作
该操作用于去除数据流中的重复元素,产生新的流。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 1, 2);
list.stream()
.distinct()
.forEach(System.out::println);
输出结果:1,2,3
5、limit() 截断操作
该操作用于截断数据流的长度,产生新的流。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
.limit(3)
.forEach(System.out::println);
输出结果:1,2,3
6、skip() 跳过操作
该操作用于跳过数据流的前几个元素,产生新的流。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
.skip(2)
.forEach(System.out::println);
输出结果:3,4,5
7、flatMap() 扁平化操作
该操作用于将多个流合并成一个流,产生新的流。
例如:
List<List<Integer>> list = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6));
list.stream()
.flatMap(m -> m.stream())
.forEach(System.out::println);
输出结果:1,2,3,4,5,6
二、终端操作
1、forEach() 输出操作
该操作用于对数据流中的每个元素进行操作。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
.forEach(System.out::println);
输出结果:1,2,3,4,5
2、count() 计算操作
该操作用于计算数据流中元素的个数。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
long count = list.stream()
.count();
System.out.println(count);
输出结果:5
3、reduce() 聚合操作
该操作用于将数据流中的元素聚合为一个值。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> sum = list.stream()
.reduce((a, b) -> a + b);
System.out.println(sum.get());
输出结果:15
4、collect() 收集操作
该操作用于将数据流中的元素收集到一个集合中。
例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenList = list.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenList);
输出结果:[2,4]
五、总结
Stream API是Java中的一个强大的函数式编程库,它提供了一种轻松而高效的方式来处理集合中的元素。它由一系列操作构成,包括中间操作和终端操作。中间操作用于处理数据流中的元素,产生新的流,而终端操作则用于产生最终结果。熟练掌握Stream API可以使Java程序员更好地完成代码中的数据流操作。
