컨텍스트 : 나는 wsdl2java에 의해 생성 된 체인 개체가 있습니다. 비누 웹 서비스를 호출하고 xml을 수신하고 계단식 객체에서 비 정렬 화하는 메소드가 이미 작성되었습니다.두 번 사용할 수 있습니다 if 각 다른 반환 또는 분기 맵을 확인
욕망 : 다른 계층 구조 노드에있는 두 개의 서로 다른 개체를 가져오고 싶습니다. 매핑 관점에서 보면 서로 멀리 떨어져 있지만 비즈니스 관점에서는 "부부"입니다.
이
현재 노력하고 있습니다 :Optional.ofNullable(onderneming.getOndernemingOfVestiging()).map(OndernemingOfVestigingType::getCode) //same return
.map(CodeOndernemingOfVestigingType::getValue) // different object return
.ifPresent(o -> myMethod("onderneming_type", o.getValue()))
.map(CodeOndernemingOfVestigingType::getBeschrijving) // different object return
.ifPresent(o -> myMethod("onderneming_type_omschrijving", o.getValue()));
내가 하나를 가질 수 있기 때문에이 작동하지 않는 것을 이해 :
Optional.ofNullable(onderneming.getOndernemingOfVestiging()).map(OndernemingOfVestigingType::getCode) //same return
.map(CodeOndernemingOfVestigingType::getValue) // different object return
.ifPresent(o -> myMethod("onderneming_type", o.getValue()));
Optional.ofNullable(onderneming.getOndernemingOfVestiging()).map(OndernemingOfVestigingType::getCode) //same return
.map(CodeOndernemingOfVestigingType::getBeschrijving) // different object return
.ifPresent(o -> myMethod("onderneming_type_omschrijving", o.getValue()));
내가하려하는 것은 (의사의 설명) 같은 것입니다 clausure를 종료하고 ifPresent가 두 번 나타납니다.
더미 관점에서, 내 질문 수도 있습니다 : 포크/분기점/동일한 람다 식에서 두 가지 방향으로 맵 나누기 가능합니까?
*** 유진의 제안을 바탕으로 내가 그래서 혼란이 (내가이 상황에서 MyMethod라는 걱정하지 않는다 발생하지 않습니다에서 System.out.println하는 MyMethod라는 변경 성공적으로
Optional.ofNullable(onderneming.getOndernemingOfVestiging()).map(OndernemingOfVestigingType::getCode)
.ifPresent(o -> {
System.out.println(o.getValue().getValue());
System.out.println(o.getBeschrijving().getValue());
});
을했다. 그것은 수 인스턴스화 된 객체의 임의의 다른 메소드가 될 수 있습니다.
비록 그것이 작동하고 그것은 하나의 두 개의 람다 문장 대신 원래의 것보다 좋은 발전을 보였습니다. 나는 몇 가지 문제를 봅니다. "o.getValue(). getValue()"및 "o.getBeschrijving() .getValue() "는 안전하지 않은 null입니까? 다음
static class User {
private final Integer age;
private final String name;
public User(Integer age, String name) {
this.age = age;
this.name = name;
}
public Optional<Integer> getAge() {
return Optional.ofNullable(age);
}
public String getName() {
return name;
}
}
그리고 :
이Optional<User> user = Optional.of(new User(null, "test"));
user.map(u -> Map.entry(u, u.getAge())) // this is java-9 Map.entry; but you can use a Pair or a List/array etc
.ifPresent(x -> {
System.out.println("name = " + x.getKey().getName());
x.getValue().ifPresent(age -> {
System.out.println("age = " + age);
});
});
당신은 동일하게 적용 할 수 u는 여기에 마음을하지 않는 경우에 나는 조금 여기 예를 단순화했습니다
매핑에 'myMethod'를 사용 하시겠습니까, 아니면 여전히 원래 값입니까? – ByeBye
['ifPresentOrElse'] (https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html#ifPresentOrElse-java.util.function.Consumer-java.lang)을 살펴 보는 것은 어떻습니까? Runnable-) Java9에서 소개 되었습니까? – nullpointer
@ Nullpointer, 고맙지 만 자바 9를 아직 사용할 수 없습니다. –