Java Stream : how to pass Set to Stream. of() 并在每个元素上调用方法?

标签 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;

我已经尝试过这个,但它不会检查 Set 是否为空:

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

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

最佳答案

您可以使用Optional.ofNullable实现这一目标:

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

关于Java Stream : how to pass Set to Stream. of() 并在每个元素上调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42071868/

相关文章:

java - 如何在 Java 中捕获 Material 下拉菜单选择的值?

java - getValue 返回列表的反向映射

java - 并行 flatMap 总是顺序的

java - Java中Streams的正确使用

java - MongoDB 检查插入

java - checkstyle + 抑制过滤器

java - 如何根据当前日期(包括java中的当前日期)获取最近三个月的第一个日期和最后一个日期?

java - 解析scala中的日期(java时间api)

java - Jersey 解析 Java 8 日期时间

java - 使用 lambda 表达式求和成员变量?