Java 8 Stream API:从 List 中提取多个字段

Java 8 引入了 Stream API,使得处理集合中的数据变得更加高效和简洁。在许多场景中,我们需要从一个对象列表中提取出多个字段,这里我们将通过一个示例来演示如何使用 Stream API 来实现这一点。

示例背景

假设我们有一个 Person 类,表示一个人的基本信息,包括姓名、年龄和性别。我们希望提取出这些人的姓名和性别,以供后续使用。

Person 类定义

首先,我们需要定义一个简单的 Person 类。

public class Person {
    private String name;
    private int age;
    private String gender;

    // Constructor
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // Getters
    public String getName() {
        return name;
    }

    public String getGender() {
        return gender;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
创建 Person 对象列表

接下来,我们创建一个 List<Person>,并填充一些数据。

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("Alice", 30, "Female"),
            new Person("Bob", 25, "Male"),
            new Person("Charlie", 35, "Male"),
            new Person("Diana", 28, "Female")
        );

        // 提取姓名和性别
        extractNamesAndGenders(people);
    }

    public static void extractNamesAndGenders(List<Person> people) {
        // 方法逻辑将在这里
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
使用 Stream 提取字段

现在,让我们使用 Stream API 来提取姓名和性别。我们可以使用 map 方法来转换 Person 对象为一个包含姓名和性别的字符串数组。

import java.util.Map;
import java.util.stream.Collectors;

public static void extractNamesAndGenders(List<Person> people) {
    List<String> namesAndGenders = people.stream()
        .map(person -> person.getName() + " - " + person.getGender())
        .collect(Collectors.toList());

    namesAndGenders.forEach(System.out::println);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
代码完整性

完整的代码如下:

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

public class Main {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("Alice", 30, "Female"),
            new Person("Bob", 25, "Male"),
            new Person("Charlie", 35, "Male"),
            new Person("Diana", 28, "Female")
        );

        extractNamesAndGenders(people);
    }

    public static void extractNamesAndGenders(List<Person> people) {
        List<String> namesAndGenders = people.stream()
            .map(person -> person.getName() + " - " + person.getGender())
            .collect(Collectors.toList());

        namesAndGenders.forEach(System.out::println);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

总结

在本文中,我们学习了如何利用 Java 8 的 Stream API 从一个对象列表中提取多个字段。通过 map 方法,我们轻松地将 Person 对象转换成只包含姓名和性别的字符串。Stream API 使得编写此类代码变得更加简洁和易读。

流程图

以下是提取多个字段的流程图:

开始 创建 Person 列表 调用 extractNamesAndGenders 使用 Stream 提取字段 打印姓名和性别 结束

关系图

下面是 Person 类的关系图:

PERSON String name int age String gender

Stream API 是一个强大的工具,它能让我们的代码更具可读性与可维护性。希望您能在日常开发中灵活运用这些知识!