在Java 8中,可以使用Stream API和Lambda表达式来根据匹配条件从两个不同的对象列表中创建对象列表。下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 25));
personList.add(new Person("Bob", 30));
personList.add(new Person("Charlie", 35));
List<Address> addressList = new ArrayList<>();
addressList.add(new Address("Alice", "123 Street"));
addressList.add(new Address("Bob", "456 Avenue"));
addressList.add(new Address("Eve", "789 Road"));
List<PersonAddress> personAddressList = createPersonAddressList(personList, addressList);
System.out.println(personAddressList);
}
public static List<PersonAddress> createPersonAddressList(List<Person> personList, List<Address> addressList) {
return personList.stream()
.flatMap(person -> addressList.stream()
.filter(address -> person.getName().equals(address.getName()))
.map(address -> new PersonAddress(person.getName(), person.getAge(), address.getAddress())))
.collect(Collectors.toList());
}
}
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
class Address {
private String name;
private String address;
public Address(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return "Address{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
class PersonAddress {
private String name;
private int age;
private String address;
public PersonAddress(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return "PersonAddress{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
这段代码中,我们有两个类Person
和Address
,分别表示人和地址。我们要根据两个对象列表personList
和addressList
中的匹配条件(姓名),创建一个新的对象列表personAddressList
,其中包含匹配的姓名、年龄和地址。
在createPersonAddressList
方法中,我们使用Stream API和Lambda表达式来实现这个功能。首先,我们使用personList.stream()
创建一个人的流,然后使用flatMap
方法将每个人与地址列表进行匹配。在flatMap
方法中,我们使用addressList.stream()
创建地址的流,并使用filter
方法过滤出与当前人的姓名匹配的地址。最后,我们使用map
方法将匹配的姓名、年龄和地址转换为PersonAddress
对象。最终,我们使用collect
方法将所有匹配的PersonAddress
对象收集到一个列表中。
运行上述代码,将输出以下结果:
[PersonAddress{name='Alice', age=25, address='123 Street'}, PersonAddress{name='Bob', age=30, address='456 Avenue'}]
这个结果是根据匹配条件从两个不同的对象列表中创建的对象列表,其中包含了匹配的姓名、年龄和地址。
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云