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

Java函数式编程:Stream API的使用

发布时间:2023-06-21 17:35:04

随着Java 8的发行,Java在函数式编程方面有了更多的进步。Java 8增加了Stream API,这是一个非常强大的功能,它使我们可以使用类似于LINQ的查询方式来操作集合。这在Java中的编码变得更加简洁和明了。在这篇文章中,我们将探讨一下Stream API的使用。

1. 创建一个Stream

在Java 8中,我们可以使用一个集合来创建一个Stream:

List<String> items = new ArrayList<>();
items.add("One");
items.add("Two");
items.add("Three");
Stream<String> stream = items.stream();

我们可以在一个数组中创建一个Stream:

String[] arr = {"One", "Two", "Three"};
Stream<String> stream = Arrays.stream(arr);

我们也可以在使用Stream.of()创建一个Stream:

Stream<String> stream = Stream.of("One", "Two", "Three");

2. Stream API中的中间操作

在Stream API中,中间操作是在一个现有的Stream上执行的函数操作。这些操作不会修改Stream,而是返回一个新的Stream。

2.1 过滤操作

过滤操作可以通过想过滤器一样使用。仅当指定的Predicate对象返回true时,Stream中的元素才会保留下来。

Stream<String> stream = Stream.of("One", "Two", "Three", "Four", "Five");
Stream<String> filteredStream = stream.filter(s -> s.startsWith("T"));

2.2 映射操作

映射操作可以通过应用给定函数来将一个Stream中的每个元素转换为另一个Stream中的另一个元素。

Stream<String> stream = Stream.of("One", "Two", "Three");
Stream<String> mappedStream = stream.map(s -> s.toUpperCase());

2.3 排序操作

可以通过指定一个Comparator接口的实现来对Stream进行排序。

Stream<String> stream = Stream.of("Three", "One", "Two");
Stream<String> sortedStream = stream.sorted((s1, s2) -> s1.compareTo(s2));

2.4 去重操作

可以利用distinct操作来消除Stream中的重复元素。

Stream<String> stream = Stream.of("One", "Two", "One", "Three");
Stream<String> distinctStream = stream.distinct();

2.5 截断操作

可以使用limit操作获取Stream的前n个元素:

Stream<String> stream = Stream.of("One", "Two", "Three", "Four", "Five");
Stream<String> limitedStream = stream.limit(3);

2.6 跳过操作

skip操作可以跳过Stream中的前n个元素:

Stream<String> stream = Stream.of("One", "Two", "Three", "Four", "Five");
Stream<String> skippedStream = stream.skip(2);

3. Stream API中的终端操作

在Stream API中,终端操作是最后一个在一个Stream上执行的操作。它们会返回一个结果或者执行一个操作。

3.1 收集操作

可以使用collect操作来将Stream中的元素收集到一个集合中:

List<String> list = Stream.of("One", "Two", "Three").collect(Collectors.toList());

3.2 匹配操作

可以使用匹配操作来检查Stream中是否存在任何元素。可以使用所有匹配或任何匹配等。

Stream<String> stream = Stream.of("One", "Two", "Three");
boolean anyMatch = stream.anyMatch(s -> s.startsWith("T"));

3.3 归约操作

可以使用reduce操作对Stream中的元素进行归约操作。reduce操作将Stream中的元素按一定的方式组合在一起并生成一个结果。

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Optional<Integer> reduced = stream.reduce((a, b) -> a + b);

3.4 并行处理

可以使用parallelStream操作并行处理Stream中的元素。

Stream<String> stream = Stream.of("One", "Two", "Three", "Four", "Five");
stream.parallel().forEach(System.out::println);

上面就是使用Java 8的Stream API实现函数式编程的简单介绍。Stream API使我们可以轻松快捷地处理集合中的元素,简化了代码,提高了效率。可以使我们的开发变得更加高效。