Java流映射到多属性

Java流映射到多属性,java,json,optional,Java,Json,Optional,我正在使用Optional并使用streams从中提取各种属性 class MyCompany { private Age age; private Name name; // getters and setters } myJSON .map(jsonObj -> getAge(jsonObj, "age")) .map(age -> new Age(age))

我正在使用
Optional
并使用streams从中提取各种属性

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 -> getName(jsonObj, "name"))
                .map(name -> new Name(name))
                .ifPresent(myCompany::setName);

public Integer getAge(ObjectNode jsonObj, String toGet) {
    Integer value = null;

    if (jsonObj(toGet)) {

        value = jsonObj(toGet).intValue();

    }

    return value;
}
现在我想更改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
}

片段代码中没有关于
可选的更多信息,请尝试下面的代码

@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;
}
@测试
公共无效测试2(){
//MyCompanyJSON字符串
字符串myCompany=“{\'age\':20,\'name\':\'Tom\'”;
JSONObject JSONObject=JSONObject.parseObject(myCompany);
//结伴
可选的tom=Stream.of(jsonObject).map(m->newperson(m.getInteger(“age”)、m.getString(“name”))
.map(p->new Company(p)).findFirst();
if(tom.isPresent()){
System.out.println(tom.get());
//控制台中的输出
//测试。公司(人员=测试。人员(年龄=20,姓名=汤姆))
}
}
@资料
@AllArgsConstructor
静态类人{
私人互联网;
私有字符串名称;
}
@资料
@AllArgsConstructor
静态类公司{
私人;
}
@资料
@AllArgsConstructor
静态类MyCompany{
私人互联网;
私有字符串名称;
}

片段代码中的
myJSON
是什么?可选,ObjectNode是jackson
getAge(jsonObj,“age”)的定义是什么?替换它以使用
ObjectMapper
(因为您已经在使用Jackson)。然后直接映射到具体对象。另一方面,(1)您还没有在代码中使用java流,负责
map
ifPresent
API的是
Optional
。(2)
getAge(jsonObj,“name”)
看起来像是输入错误或用词不当。我为
getAge
添加了类似的方法
getName
可以显示json输入吗