如何在Java中使用Stream函数来操作数据集合?
Java 中的 Stream 是一种通过声明式方式对集合进行操作的 API,提供了一种简便、高效、可复合的方法来处理数据集合。Stream 函数主要分为中间操作和终止操作两类,其中中间操作可以多次连接,形成一个管道,最后由终止操作进行处理。下面将介绍 Java Stream 中的常见使用方法。
1、从集合生成流
我们可以从 Collection 或者数组中生成一个 Stream。示例如下:
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Stream<String> stream = list.stream();
String[] arr = {"apple", "banana", "orange", "pear"};
Stream<String> arrayStream = Arrays.stream(arr);
2、中间操作:过滤、映射、去重、排序、截取等
中间操作可以多次连接成一个管道,主要作用是筛选、转换、排序和截取等。
(1)过滤
通过 filter 方法,我们可以将 Stream 中的元素按照指定条件进行筛选。
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Stream<String> stream = list.stream();
stream.filter(str -> str.startsWith("a")).forEach(System.out::println);
(2)映射
通过 map 方法我们可以将 Stream 中的元素进行转换,转换成另一种类型的元素。
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Stream<String> stream = list.stream();
stream.map(String::toUpperCase).forEach(System.out::println);
(3)去重
通过 distinct 方法我们可以将 Stream 中的重复元素去除。
List<String> list = Arrays.asList("apple", "banana", "orange", "pear", "banana");
Stream<String> stream = list.stream();
stream.distinct().forEach(System.out::println);
(4)排序
通过 sorted 方法我们可以将 Stream 中的元素进行排序。
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Stream<String> stream = list.stream();
stream.sorted().forEach(System.out::println);
(5)截取
通过 limit 方法我们可以截取 Stream 中指定数量的元素。
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Stream<String> stream = list.stream();
stream.limit(2).forEach(System.out::println);
3、终止操作:聚合、收集、归约、遍历等
(1)聚合
通过 count、max、min、sum、average 方法可以对 Stream 中的元素进行聚合计算。
List<Integer> list = Arrays.asList(1, 3, 2, 5, 4);
Stream<Integer> stream = list.stream();
long count = stream.count();
int max = list.stream().max(Integer::compareTo).get();
int min = list.stream().min(Integer::compareTo).get();
int sum = list.stream().mapToInt(Integer::intValue).sum();
double average = list.stream().mapToInt(Integer::intValue).average().orElse(0.0);
System.out.println("count: " + count);
System.out.println("max: " + max);
System.out.println("min: " + min);
System.out.println("sum: " + sum);
System.out.println("average: " + average);
(2)收集
通过 collect 方法我们可以将 Stream 中的元素收集到新的集合中。
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Stream<String> stream = list.stream();
List<String> newList = stream.collect(Collectors.toList());
System.out.println(newList);
(3)归约
通过 reduce 方法可以将 Stream 中的所有元素归约为一个结果。
List<Integer> list = Arrays.asList(1, 3, 2, 5, 4);
Stream<Integer> stream = list.stream();
int sum = stream.reduce(0, Integer::sum);
System.out.println("sum: " + sum);
(4)遍历
通过 forEach 方法我们可以对 Stream 中的元素进行遍历操作。
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
以上是 Java Stream 中常见的使用方法,我们可以根据实际需求灵活使用。使用 Stream 可以极大地提升书写效率,简洁易懂,并且能够更好地体现 Java 8 的函数式编程思想。
