Java8 lambda嵌套null检查

时间:2015-08-19 19:21:41

标签: java lambda java-8 optional

目前我使用以下格式的this.route('posts')值: 有没有办法进一步减少代码?

Optional

1 个答案:

答案 0 :(得分:3)

首先,如果您已经使用null,则应避免返回Optional。相反,空Optional应表示该元素缺失。

Optional::map只会映射该值(如果存在)。 因此,而不是检查值isPresent然后重新编译null, 你可以简化这个

attributeValueList.flatMap(values -> values.stream().filter((attribute) -> StringUtils.equals(attribute.getFoo(), attributeV.getBar()).findFirst())
...

当您将其更改为

时,您也可以将其应用于第二次isPresent检查
return value.map(x -> x.bar());

所有这些都可能看起来像这样(没有经过测试,因为我不知道这些课程):

return Optional.<Product>of(product)
        .map(Product::getServiceAttributes)
        .map(ServiceAttributeMap::getMap)
        .map((v) -> (ServiceAttribute) v.get(attributeV.getAttributeString()))
        .map(c::getValueList)
        .flatMap(values -> values
            .stream()
            .filter((attribute) -> StringUtils.equals(attribute.getFoo(), attributeV.getBar()))
            .findFirst())
        .map(x -> x.bar());

这样做的积极作用是,当其中一个步骤没有返回任何内容时,您的函数返回空Optional。所有其他步骤都将被忽略。