gpt4 book ai didi

java - 如何根据子对象字段获取父对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:32:23 24 4
gpt4 key购买 nike

父类:

public class Person {
String firstName;
String lastName;
Long id;
List<Phone> phoneNumber = new ArrayList<>();
int age;

public Person(String firstName, String lastName, int age, Long id, List<Phone> phone) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.id = id;
this.phoneNumber = phone;
}

子电话对象(第一级):

public class Phone {
String number;
String type;
Long id;
public Phone(String number, String type, Long id) {
super();
this.number = number;
this.type = type;
this.id = id;
}
}

我正在尝试获取电话对象类型为 home 且其号码应包含“888”的人员对象。

List<Phone> list = personList.stream().map(p -> p.getPhoneNumber().stream()).
flatMap(inputStream -> inputStream).filter(p -> p.number.contains("888") && p.type.equals("HOME")).collect(Collectors.toList());

System.out.println(list.toString());

从上面的流代码中,我可以得到电话对象。但是如何在同一函数本身中获取该电话对象的父对象?

我尝试过这种方式,但对于不匹配的对象,我得到的是 null。

List<Person> finalList = personList.stream().map( per -> {
List<Phone> phones = per.getPhoneNumber();
Optional<Phone> ph = phones.stream().filter(p -> p.number.contains("888") && p.type.equals("HOME")).findAny();
if(ph.isPresent())
return per;
return null;
}).collect(Collectors.toList());

最佳答案

List<Person> result = personList.stream()
.filter( person -> person.phoneNumber.stream()
.anyMatch(phone -> phone.type.equals("HOME") &&
phone.number.contains("888"))
.collect(Collectors.toList());

您正在寻找的是电话的。它会成功的。

让人们拥有他们的手机,您现在可以移除那些不符合条件的手机。

List<Person> result = personList.stream()
.filter( person -> person.phoneNumber.stream()
.anyMatch(phone -> phone.type.equals("HOME") &&
phone.number.contains("888"))
.map(person -> {
List<Phone> phones = person.phoneNumber.stream()
.filter(phone -> phone.type.equals("HOME") &&
phone.number.contains("888"))
.collect(Collectors.toList());
return new Person(person.firstName, person.lastName, person.age, person.id, phones);
})
.collect(Collectors.toList());

关于java - 如何根据子对象字段获取父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46542106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com