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;
}
}
创建 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) {
// 方法逻辑将在这里
}
}
使用 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);
}
代码完整性
完整的代码如下:
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);
}
}
总结
在本文中,我们学习了如何利用 Java 8 的 Stream API 从一个对象列表中提取多个字段。通过 map
方法,我们轻松地将 Person 对象转换成只包含姓名和性别的字符串。Stream API 使得编写此类代码变得更加简洁和易读。
流程图
以下是提取多个字段的流程图:
flowchart TD
A[开始] --> B[创建 Person 列表]
B --> C[调用 extractNamesAndGenders]
C --> D[使用 Stream 提取字段]
D --> E[打印姓名和性别]
E --> F[结束]
关系图
下面是 Person
类的关系图:
erDiagram
PERSON {
String name
int age
String gender
}
Stream API 是一个强大的工具,它能让我们的代码更具可读性与可维护性。希望您能在日常开发中灵活运用这些知识!