当前位置: 首页 > 知识库问答 >
问题:

如何基于子对象字段获取父对象

盖夕
2023-03-14

父类:

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;
    }
}

我正在尝试获取person对象,其phone对象类型为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());

共有1个答案

楮景明
2023-03-14
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());
 类似资料:
  • 我有个简单的课 我创建了这个类的样本对象的ArrayList 这里没有显示我后来如何填充对象的其他字段(名称,地址等) 有没有一种方法可以使用字母数字字符串id快速检索其中一个对象,而无需遍历整个列表?(没有实现数据库层) 差不多

  • 问题内容: 我对Java(作为C ++程序员)有一点疑问。 我有2个相关课程: 这将输出: org.example.smartgwt.server.model.PatientPersistent类 有没有一种方法可以获取父类的类型?即 org.example.smartgwt.server.model.Patient类。 这将使我能够概括一些我需要在每个可怕的孩子中实现的方法。 谢谢! 更新 我正

  • 在我的角度 this.device返回对象。每个对象都包含一个字段,并且在所有15个对象上都有不同的值。如果我可以访问underscore.js,我就会这样做,但是在这个项目中,我没有它。 什么是JS的方法来访问它而不需要执行for循环?

  • 我有两个具有一对多关系的实体,它们通过复合主键连接在一起。由于Spring Data为oracle数据库生成错误计数不同的查询,我SQL笛卡尔连接的输出,这导致每一行子对象都重复父对象的行。我需要找出基于复合键的不同的父对象,然后在列表中为父对象添加每个子对象,并将其设置为父对象的属性 我能够根据父对象的组合键找到不同的父对象。以下是相关代码 假设我有以下输入 我需要产生以下输出 这方面的任何帮助

  • 我的背景是C,在那里我们可以使用子类对象访问父类的公共字段。示例: 如何在Java继承中实现同样的功能? 我还有另一个关于覆盖的问题,但由于Stackoverflow规则,我将作为单独的问题提问。 那么,使用子类对象引用打印/访问Java的父类方法的语法应该是什么?我尝试了。等,但不工作。

  • 我有一个场景,从多个json文件中读取数据,并将其映射到特定的json格式。 J输出: 我试图将文件读取的输入直接映射到有效的json格式,以避免读取一个jsonObj中的所有文件,将其映射到一个对象(类)中,并在新对象中添加每个参数以创建jsonoutput。 我还希望在合并这些json内容时处理共享的可变状态,因此我使用锁(obj),进行此映射的方法是异步方法。 我正在使用JSchema生成预