Java流映射到多个属性

问题描述 投票:0回答:1

我正在使用Optional<ObjectNode>,并使用流从中提取各种属性。

class MyCompany {
    private Age age;
    private Name name;

    // getters and setters

}

        myJSON
                .map(jsonObj -> getAge(jsonObj, "age"))
                .map(age -> new Age(age))
                .ifPresent(myCompany::setAge);


        myJSON
                .map(jsonObj -> getAge(jsonObj, "name"))
                .map(name -> new Name(name))
                .ifPresent(myCompany::setName);

现在,我想更改MyCompany以包括新的Person类,并且Person应包括名称和年龄属性。如何在单个语句中使用Java流根据名称和年龄来表示Person,然后在MyCompany

中进行设置
class Person {
    private Age age;
    private Name name;
    // getters and setters


    public void Person(Age age, Name name) {
       this.name = name;
       this.age = age;

    }
}

class MyCompany {
    private Person person;
    //getters and setters for Person
}
java json optional
1个回答
0
投票

您的片段代码中没有有关Optional<ObjectNode>的更多信息,请尝试以下代码。

@Test
public void test2() {

    //MyCompany JSON String
    String myCompany = "{\"age\":20,\"name\":\"Tom\"}";
    JSONObject jsonObject = JSONObject.parseObject(myCompany);

    //convert to Company with Person
    Optional<Company> tom = Stream.of(jsonObject).map(m -> new Person(m.getInteger("age"), m.getString("name")))
            .map(p -> new Company(p)).findFirst();
    if (tom.isPresent()) {
        System.out.println(tom.get());
        //output in console
        //Tests.Company(person=Tests.Person(age=20, name=Tom))
    }
}

@Data
@AllArgsConstructor
static class Person {
    private int age;
    private String name;
}

@Data
@AllArgsConstructor
static class Company {
    private Person person;
}

@Data
@AllArgsConstructor
static class MyCompany {
    private int age;
    private String name;
}
© www.soinside.com 2019 - 2024. All rights reserved.