java8 Stream API

本文介绍了Java8中StreamAPI的概念,如何使用中间操作和终端操作处理集合数据,以及展示了filter(),map(),sorted(),distinct(),limit()等操作的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   一、简介

        Stream API 是 Java 8 中引入的一个新的抽象层,用于对集合数据进行操作和处理。它提供了一种新的、声明性的方式来处理集合数据,使代码更简洁、更易读、更易维护。

        Stream API 的主要作用是对集合数据进行筛选、转换、聚合等操作,而无需显式地使用循环。它将集合数据的操作抽象成一个流(Stream),开发者可以在流上进行一系列的操作,最终得到想要的结果。

        Stream API 的操作可以分为两类:中间操作和终端操作。

        中间操作是指在流上进行的转换操作,如筛选、映射、排序等。这类操作返回的是一个新的流,可以进行链式调用。

        终端操作是指对流进行最终操作,如聚合、收集、迭代等。终端操作触发实际的计算,并返回最终的结果或副作用。

以下是一些常见的 Stream API 操作方法:

  • filter(Predicate):根据指定的条件筛选元素。
  • map(Function):对每个元素执行指定的转换操作。
  • sorted(Comparator):对元素进行排序。
  • distinct():去除重复的元素。
  • limit(n):截取前 n 个元素。
  • skip(n):跳过前 n 个元素。
  • forEach(Consumer):对每个元素执行指定的操作。
  • collect(Collector):将流中的元素收集到一个集合中。

通过使用 Stream API,可以以更简洁、更易读的方式处理集合数据,减少了显式的循环和临时变量的使用,提高了代码的可读性和可维护性。

二、示例

1.filter(Predicate):筛选满足指定条件的元素。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Emily");
List<String> filteredNames = names.stream()
                                 .filter(name -> name.length() > 4)
                                 .collect(Collectors.toList());
// 输出结果为 ["Alice", "Charlie"]

2.map(Function):对每个元素执行指定的转换操作。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream()
                                .map(String::length)
                                .collect(Collectors.toList());
// 输出结果为 [5, 3, 7]

3.sorted(Comparator):对元素进行排序。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> sortedNames = names.stream()
                               .sorted()
                               .collect(Collectors.toList());
// 输出结果为 ["Alice", "Bob", "Charlie"]

4.distinct():去除重复的元素。

List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 1, 4, 3);
List<Integer> distinctNumbers = numbers.stream()
                                       .distinct()
                                       .collect(Collectors.toList());
// 输出结果为 [1, 2, 3, 4]

5.limit(n):截取前 n 个元素。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> limitedNumbers = numbers.stream()
                                      .limit(3)
                                      .collect(Collectors.toList());
// 输出结果为 [1, 2, 3]

        这些只是 Stream API 的一部分操作方法示例,还有其他许多操作方法可以用于更复杂的操作。你可以根据具体的需求选择相应的操作方法来处理集合数据。

6.组合过滤

         过滤出年龄大于等于18岁且得分大于80分的学生:

class Student {
    private String name;
    private int age;
    private int score;
    
    public Student(String name, int age, int score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    // 省略 getter 和 setter 方法
}

List<Student> students = Arrays.asList(
        new Student("Alice", 20, 85),
        new Student("Bob", 17, 75),
        new Student("Charlie", 19, 90)
);

List<Student> filteredStudents = students.stream()
                                         .filter(student -> student.getAge() >= 18 && student.getScore() > 80)
                                         .collect(Collectors.toList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员易晶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值