我正在使用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
}
您的片段代码中没有有关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;
}