如何在java 8中映射后返回可选值

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

我需要获取作为标识符的字符串值,但这返回 void 而不是字符串值。 如何返回字符串值?

    String previousReadyForHome = information.getPreviousContact().ifPresent(val->{
      Arrays.stream(val.basic.identifiers).filter(s -> s.type == readyForHomeType)
        .map(s -> s.identifier).findFirst().orElse(null);
    });
java string lambda java-8 option-type
2个回答
4
投票

您不应该使用

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);

0
投票

假设你的班级名称:

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());

这只是一种更具可读性的方法。

© www.soinside.com 2019 - 2024. All rights reserved.