Java 8 引入了 Stream API,使得对集合的操作变得更加简洁和高效。Stream 提供了一系列用于处理集合的常用方法,本文将详细介绍这些方法的使用,并通过代码示例进行演示。

1. 创建 Stream

你可以通过多种方式创建 Stream,最常见的是通过集合(如 List、Set)和数组。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamExample {
    public static void main(String[] args) {
        // 从集合创建 Stream
        List<String> list = Arrays.asList("a", "b", "c", "d");
        Stream<String> streamFromList = list.stream();

        // 从数组创建 Stream
        String[] array = new String[]{"e", "f", "g"};
        Stream<String> streamFromArray = Arrays.stream(array);
    }
}

2. 常用方法

2.1. filter()

filter() 方法用于过滤 Stream 中的元素,返回满足条件的元素。

List<String> filteredList = list.stream()
        .filter(s -> s.equals("b"))
        .collect(Collectors.toList());
System.out.println(filteredList); // 输出: [b]

2.2. map()

map() 方法用于对 Stream 中的每个元素进行处理,返回一个新的 Stream。

List<String> upperList = list.stream()
        .map(String::toUpperCase)
        .collect(Collectors.toList());
System.out.println(upperList); // 输出: [A, B, C, D]

2.3. flatMap()

flatMap() 方法用于将每个元素映射为多个元素,并合并成一个 Stream。

List<List<String>> listOfLists = Arrays.asList(
        Arrays.asList("a", "b"),
        Arrays.asList("c", "d")
);

List<String> flatMappedList = listOfLists.stream()
        .flatMap(List::stream)
        .collect(Collectors.toList());
System.out.println(flatMappedList); // 输出: [a, b, c, d]

2.4. distinct()

distinct() 方法用于去除 Stream 中的重复元素。

List<String> distinctList = Arrays.asList("a", "b", "b", "c", "c").stream()
        .distinct()
        .collect(Collectors.toList());
System.out.println(distinctList); // 输出: [a, b, c]

2.5. sorted()

sorted() 方法用于对 Stream 中的元素进行排序。

List<String> sortedList = list.stream()
        .sorted()
        .collect(Collectors.toList());
System.out.println(sortedList); // 输出: [a, b, c, d]

2.6. limit()skip()

limit(n) 用于获取 Stream 中前 n 个元素,skip(n) 用于跳过前 n 个元素。

List<String> limitedList = list.stream()
        .limit(2)
        .collect(Collectors.toList());
System.out.println(limitedList); // 输出: [a, b]

List<String> skippedList = list.stream()
        .skip(2)
        .collect(Collectors.toList());
System.out.println(skippedList); // 输出: [c, d]

2.7. reduce()

reduce() 方法用于将 Stream 中的元素组合成一个单一的结果。

Optional<String> concatenated = list.stream()
        .reduce((s1, s2) -> s1 + s2);
concatenated.ifPresent(System.out::println); // 输出: abcd

3. 终止操作

Stream 的操作通常分为两类:中间操作和终止操作。中间操作返回一个新的 Stream,而终止操作则会返回一个最终的结果,比如 collect()forEach()count()

long count = list.stream().count();
System.out.println(count); // 输出: 4

list.stream().forEach(System.out::println); // 输出: a b c d

总结

Java Stream API 提供了强大而灵活的方法来处理集合,使代码更加简洁易读。通过使用 filter()map()flatMap()distinct()sorted() 等方法,开发者可以用非常简洁的方式进行复杂的数据操作。在实际开发中,合理使用 Stream,可以显著提高代码的可维护性和执行效率。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部