欢迎访问宙启技术站
智能推送

Java中常用的函数式编程库——Stream API

发布时间:2023-06-03 08:36:15

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程序员更好地完成代码中的数据流操作。