Java中如何使用streamAPI进行函数式编程?
Java中的Stream API是从Java 8版本开始引入的,它提供了一种函数式编程的方式来处理集合和数组,可以简化代码并提高代码的可读性和性能。
1. 创建Stream
Stream API 提供了多种方式创建Stream:
- 通过集合创建Stream
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
- 通过数组创建Stream
String[] array = new String[]{"a", "b", "c"};
Stream<String> stream = Arrays.stream(array);
- 通过Stream.of()创建Stream
Stream<String> stream = Stream.of("a", "b", "c");
- 通过Stream.iterate()创建无限Stream
Stream<Integer> stream = Stream.iterate(0, n -> n + 1);
2. 中间操作
Stream API 提供了多个中间操作方法,可以用来对Stream进行过滤、映射、排序等操作:
- filter():过滤元素
Stream<String> stream = list.stream().filter(s -> s.startsWith("a"));
- map():对元素进行映射
Stream<String> stream = list.stream().map(s -> s.toUpperCase());
- sorted():排序
Stream<String> stream = list.stream().sorted();
- distinct():去重
Stream<String> stream = list.stream().distinct();
- limit():限制元素个数
Stream<String> stream = list.stream().limit(3);
- skip():跳过元素
Stream<String> stream = list.stream().skip(2);
3. 终止操作
Stream API 提供了多个终止操作方法,用来处理Stream并获取结果:
- forEach():遍历元素
stream.forEach(s -> System.out.println(s));
- toArray():将Stream转换为数组
String[] array = stream.toArray(String[]::new);
- collect():将Stream中的元素收集到集合中
List<String> collect = stream.collect(Collectors.toList());
- reduce():将Stream中的元素进行累加,返回累积结果
Optional<Integer> result = stream.reduce((a, b) -> a + b);
- count():返回Stream中的元素个数
long count = stream.count();
- min()、max():返回Stream中的最小或最大值
Optional<Integer> min = stream.min((a, b) -> a - b); Optional<Integer> max = stream.max((a, b) -> a - b);
4. 并行流
Stream API 提供了并行流的支持,可以充分发挥多核处理器的优势,提高处理速度:
Stream<String> parallelStream = list.parallelStream();
5. 例子
下面是一个使用Stream API的示例,对一个字符串列表进行过滤、映射和排序操作:
List<String> list = Arrays.asList("apple", "banana", "cherry");
List<String> result = list.stream()
.filter(s -> s.length() > 5)
.map(s -> s.toUpperCase())
.sorted()
.collect(Collectors.toList());
System.out.println(result);
输出结果为:[BANANA, CHERRY]
总结:
Stream API 是Java中一种强大的函数式编程工具,可以方便地对集合和数组进行处理。它提供了丰富的中间操作和终止操作方法,可以灵活地进行数据过滤、映射、排序和聚合等操作。同时,Stream API还支持并行处理,可以充分发挥多核处理器的优势,提高处理速度。通过学习和运用Stream API,可以使代码更加简洁、高效且易于理解。
