一个list根据另一个list的参数去重
时间: 2023-07-07 09:27:23 浏览: 45
假设我们有两个类,一个是`Person`类,一个是`Address`类。`Person`类包含`id`、`name`和`addressId`属性,而`Address`类包含`id`和`address`属性。现在我们有一个`List<Person>`和一个`List<Address>`,我们想要根据`Person`类中的`addressId`属性去重`Address`类的列表,以下是示例代码:
```
public class Person {
private int id;
private String name;
private int addressId;
public Person(int id, String name, int addressId) {
this.id = id;
this.name = name;
this.addressId = addressId;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAddressId() {
return addressId;
}
}
public class Address {
private int id;
private String address;
public Address(int id, String address) {
this.id = id;
this.address = address;
}
public int getId() {
return id;
}
public String getAddress() {
return address;
}
}
```
现在我们有一个`List<Person>`和一个`List<Address>`,我们想要根据`Person`类中的`addressId`属性去重`Address`类的列表,以下是示例代码:
```
List<Person> persons = new ArrayList<>();
persons.add(new Person(1, "Alice", 1));
persons.add(new Person(2, "Bob", 2));
persons.add(new Person(3, "Charlie", 1));
persons.add(new Person(4, "Dave", 3));
persons.add(new Person(5, "Eve", 2));
List<Address> addresses = new ArrayList<>();
addresses.add(new Address(1, "Address 1"));
addresses.add(new Address(2, "Address 2"));
addresses.add(new Address(3, "Address 3"));
List<Address> uniqueAddresses = persons.stream()
.map(Person::getAddressId)
.distinct()
.map(addressId -> addresses.stream()
.filter(address -> address.getId() == addressId)
.findFirst().orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
```
这个代码将会根据`Person`类中的`addressId`属性获取不同的地址ID,然后根据这些地址ID从地址列表中过滤出唯一的地址对象。最后,我们过滤掉可能为空的地址对象并将其收集到一个新的`List<Address>`中。