Java Stream:如何在每个elemnt上传递Set to Stream.of()和call方法?

Igo*_*gor 0 java java-8 java-stream

我有这样的旧式代码:

        if (setContainer.getSet() == null) {
            return null;
        }
        for (SetElement setElement : setContainer.getSet()){
            if ("SomeString".equals(SetElement.getCode())) {
                return  setElement.getValue();
            }
        }
        return null;
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它不会检查Set是否为null:

setContainer.getSet()
                    .stream()
                    .filter(setValue ->  "SomeValue".equals(setElement.getCode()))
                    .map(SetElement::getValue)
                    .findAny()
                    .orElse(null) ;
Run Code Online (Sandbox Code Playgroud)

据我所知,我应该使用,Stream.of() 但我不明白如何执行上面的代码,因为它总是返回Optional<Set<SetElement>>

Jor*_*nee 5

你可以Optional.ofNullable用来实现这个目标:

return Optional.ofNullable(setContainer.getSet())
    .flatMap(set -> set.stream()
        .filter(e ->  "SomeValue".equals(e.getCode()))
        .map(SetElement::getValue)
        .findAny())
    .orElse(null);
Run Code Online (Sandbox Code Playgroud)

  • 这是滥用"可选".现有的`if(x = null)`工作正常,三元运算符也是如此. (3认同)