我需要获取作为标识符的字符串值,但这返回 void 而不是字符串值。 如何返回字符串值?
String previousReadyForHome = information.getPreviousContact().ifPresent(val->{
Arrays.stream(val.basic.identifiers).filter(s -> s.type == readyForHomeType)
.map(s -> s.identifier).findFirst().orElse(null);
});
您不应该使用
ifPresent
,正如您所发现的,它会返回 void
。相反,您应该使用 flatMap
,它会为您提供另一个 Optional<String>
,然后您可以使用 orElse
将其解开为 null
。
String previousReadyForHome = information.getPreviousContact().flatMap(val->
Arrays.stream(val.basic.identifiers).filter(s -> s.type == readyForHomeType)
.map(s -> s.identifier).findFirst()
).orElse(null);
假设你的班级名称:
Optional<String> previousReadyForHome = information.getPreviousContact()
.map(Contact::getBasic)
.map(BasicInfo::getIdentifiers)
.flatMap(identifiers -> Arrays.stream(identifiers)
.filter(identifier -> identifier.getType() == readyForHomeType)
.map(Identifier::getIdentifier)
.findFirst());
这只是一种更具可读性的方法。