Java List 取多个字段拼成新的 List
在 Java 开发中,经常会遇到需要从一个 List 中取出多个字段,并将这些字段拼成一个新的 List。本文将介绍如何使用 Java 代码实现这个功能,并提供示例代码。
1. 问题描述
假设有一个 List,其中包含了多个对象,每个对象都有多个字段。我们希望从这个 List 中选择特定的字段,并将这些字段拼接成一个新的 List。
2. 解决方案
为了解决这个问题,我们可以使用 Java 8 的 Stream API 来处理 List 中的对象。首先,我们需要定义一个实体类来表示每个对象,然后通过 Stream API 中的 map()
方法来提取特定的字段,并将它们拼接成一个新的 List。
下面是一个示例实体类 Person
,其中包含了两个字段 name
和 age
:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
接下来,我们创建一个包含多个 Person
对象的 List:
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 30));
persons.add(new Person("Charlie", 35));
persons.add(new Person("David", 40));
现在,我们可以使用 Stream API 来提取 name
字段,并将它们拼接成一个新的 List。下面是示例代码:
List<String> names = persons.stream()
.map(Person::getName)
.collect(Collectors.toList());
在上述代码中,我们使用 stream()
方法将 List 转换为一个 Stream 对象,然后使用 map()
方法提取每个 Person
对象的 name
字段。最后,使用 collect()
方法将结果收集到一个新的 List 中。
如果我们需要同时提取多个字段,我们可以使用 map()
方法返回一个包含多个字段的对象。然后,我们可以通过自定义的方法将这些字段拼接成一个新的对象。下面是示例代码:
public class PersonInfo {
private String name;
private int age;
public PersonInfo(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
List<PersonInfo> personInfos = persons.stream()
.map(person -> new PersonInfo(person.getName(), person.getAge()))
.collect(Collectors.toList());
在上述代码中,我们定义了一个新的实体类 PersonInfo
,它包含了和 Person
类相同的字段。然后,我们通过自定义的方法使用 map()
方法来创建新的 PersonInfo
对象,其中包含了 Person
对象的 name
和 age
字段。最后,我们使用 collect()
方法将结果收集到一个新的 List 中。
3. 示例
下面是一个完整的示例代码,展示了如何使用 Java 代码将 List 中的多个字段拼接成一个新的 List:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 30));
persons.add(new Person("Charlie", 35));
persons.add(new Person("David", 40));
List<String> names = persons.stream()
.map(Person::getName)
.collect(Collectors.toList());
System.out.println(names);
List<PersonInfo> personInfos = persons.stream()
.map(person -> new PersonInfo(person.getName(), person.getAge()))
.collect(Collectors.toList());
System.out.println(personInfos);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class PersonInfo {
private String name;
private int age;
public PersonInfo(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;