0
点赞
收藏
分享

微信扫一扫

java8 stream 获取集合对象属性并去重后生成新的集合

闲云困兽 2023-09-07 阅读 53

Java 8 Stream 获取集合对象属性并去重后生成新的集合

在Java 8中,引入了Stream API,提供了一种更简洁、更高效的方式来处理集合数据。Stream API可以用来对集合进行各种操作,包括过滤、映射、排序等。

本文将介绍如何使用Java 8 Stream来获取集合对象的属性,并通过去重操作生成新的集合。我们将通过一个具体的示例来演示这个过程。

示例场景

假设我们有一个学生类Student,包含学生的姓名和年龄两个属性。现在我们有一个学生列表,我们希望根据学生的姓名获取一个不重复的学生姓名列表。

首先,我们定义Student类如下:

public class Student {
    private String name;
    private int age;

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

    // Getters and Setters

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // toString 方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

接下来,我们创建一个学生列表,并填充一些学生对象:

List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 20));
students.add(new Student("Bob", 22));
students.add(new Student("Alice", 20));
students.add(new Student("Charlie", 21));
students.add(new Student("Bob", 22));

我们的目标是从这个学生列表中获取一个不重复的学生姓名列表。

使用Stream获取属性并去重

在Java 8中,我们可以使用Stream API来操作集合。首先,我们可以通过调用stream()方法将集合转换为一个Stream对象:

Stream<Student> studentStream = students.stream();

接下来,我们可以使用map()操作来获取学生的姓名属性。在map()操作中,我们将每个学生对象映射为其姓名属性:

Stream<String> nameStream = studentStream.map(Student::getName);

在上面的代码中,Student::getName是一个方法引用,表示获取学生对象的姓名属性。

最后,我们可以使用distinct()操作来去重。distinct()操作将移除流中的重复元素,只保留唯一的元素:

Stream<String> distinctNameStream = nameStream.distinct();

上述代码中,distinct()操作将生成一个新的Stream对象,其中的元素是原Stream中唯一的元素。

生成新的集合

最后,我们可以使用collect()操作来生成一个新的集合。collect()操作接收一个Collector参数,用于定义如何将Stream中的元素收集到一个集合中。

在本例中,我们可以使用Collectors.toList()方法来将Stream收集到一个List对象中:

List<String> distinctNames = distinctNameStream.collect(Collectors.toList());

上述代码将distinctNameStream中的元素收集到一个List对象distinctNames中。

完整示例代码

下面是完整的示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 20));
        students.add(new Student("Bob", 22));
        students.add(new Student("Alice", 20));
        students.add(new Student("Charlie", 21));
        students.add(new Student("Bob", 22));

        Stream<Student> studentStream = students.stream();
        Stream<String> nameStream = studentStream.map(Student::getName);
        Stream<String> distinctNameStream = nameStream.distinct();
        List<String> distinctNames = distinctNameStream.collect(Collectors.toList());

        System.out.println("Distinct Names: " + distinctNames);
    }
}

运行上述代码,输出结果为:

Distinct Names: [Alice, Bob, Charlie]

总结

本文介绍了如何使用Java 8 Stream来获取集合对象的属性,并通过去重操作生成新的集合。我们通过一个具体的示例演示了这个过程。使用Stream API可以使得代码更简洁

举报

相关推荐

0 条评论