JavaStreamAPI:如何使用Java函数来使用StreamAPI进行数据集合处理?
Java Stream API是在Java 8中引入的新功能,它提供了一种流式处理数据集合的方式。使用Java Stream API可以使代码更简洁、易读和高效。Stream API提供了很多现成的函数,可以用来对数据集合进行各种操作。
1. 创建Stream
在Java Stream API中,可以通过各种数据源创建Stream。常见的数据源包括Collection、数组等。下面是创建Stream的常见方法。
从Collection中创建Stream
Stream<String> stream = list.stream();
Stream<String> parallelStream = list.parallelStream();
从数组中创建Stream
int[] arr = new int[]{1, 2, 3};
IntStream intStream = Arrays.stream(arr);
通过Stream.of()创建Stream
Stream<Integer> stream = Stream.of(1, 2, 3);
通过Stream.iterate()创建无限流
Stream<Integer> stream = Stream.iterate(0, n -> n + 2);
通过Stream.generate()创建无限流
Stream.generate(Math::random);
2. 中间操作
Stream API中的中间操作是指在Stream上进行的操作,这些操作返回的仍然是Stream。常见的中间操作有筛选、映射、排序等。下面是常见的中间操作。
filter() 筛选出满足条件的元素
Stream<String> stream = list.stream().filter(s -> s.length() == 4);
map() 将元素映射为另一个元素
Stream<String> stream = list.stream().map(String::toUpperCase);
flatMap() 将一个元素映射为多个元素
Stream<String[]> stream = Stream.of(str.split(" ")); //将字符串按空格分割为数组
Stream<Stream<String>> streamStream = stream.map(Arrays::stream); //将字符串数组映射为Stream<String>
Stream<String> stringStream = streamStream.flatMap(Function.identity()); //将Stream<Stream<String>>转换为Stream<String>
distinct() 去除重复元素
Stream<Integer> stream = Arrays.stream(new Integer[]{1,2,3,3,null,2,null,4}).distinct().skip(1);
sorted() 对元素进行排序
Stream<Integer> stream = Arrays.stream(new Integer[]{1, 3, 5, 7, 2, 4, 6, 8}).sorted();
3. 终止操作
Stream API中的终止操作是指最终对Stream进行的操作,这些操作返回的不再是Stream,而是另外的对象。常见的终止操作有forEach、reduce、collect等。下面是常见的终止操作。
forEach() 对元素进行遍历
list.stream().forEach(System.out::println);
reduce() 对元素进行聚合
Optional<Integer> reduce = list.stream().reduce(Integer::sum);
collect() 将Stream转换为其他类型
List<Integer> collect = list.stream().collect(Collectors.toList());
Map<String, Integer> collect = list.stream().collect(Collectors.toMap(x -> x, x -> x.length()));
4. 进阶操作
Java Stream API还提供了一些进阶操作,如并行处理等。通过使用parallel()方法,可以让Stream的操作变为并行处理。
List<String> list = new ArrayList<>(Arrays.asList("java", "python", "c++", "c#"));
Stream<String> stream = list.parallelStream().filter(s -> {
System.out.println(Thread.currentThread().getName() + " " + s);
return s.length() == 4;
});
Java Stream API是一个功能强大的工具,通过使用它可以使代码更加简洁、高效。熟练掌握Stream API,并合理应用于开发中,可以极大地提高代码质量和开发效率。
