从可选<对象>创建对象

2022-09-03 05:05:41

因此,我创建了一个来自列表的流,但是我在将其转换为以下尝试的流时遇到了一些麻烦:<ObjectType>,

ObjectType sco = getList().stream()
                          .filter(p -> p.getValue() == value)
                          .findFirst(); //also tried .orElse(null);

请问,有人会这么好心地建议我哪里出错吗?(如果以前有人问过这个问题,我很抱歉,但我找不到关于这个特定主题的讨论(或者不知道要搜索的正确术语))

提前致谢!


答案 1

findFirst()给你一个,然后你必须决定如果它不存在该怎么办。所以应该给你对象或空,如果它不存在OptionalfindFirst().orElse(null)

你可以在 上做一个,但这可能被认为是不好的做法,因为如果没有内容,就会抛出一个异常。您通常应该断言是否存在,并决定在每种情况下要做什么(这就是为什么它在那里 - 这样你就知道某些东西是真正可选的,你必须确定该怎么做).get()Optionalget()OptionalOptional

如果您有要对对象存在执行的操作,并且不想在缺席时执行任何操作,则可以调用并提供 lambda 作为参数。这将与包含的对象一起调用(如果存在)。.ifPresent()

从Java 9开始,另一个解决方案是使用Opport.ifPresentOrElse()


答案 2

我想你可能正在寻找. 在蒸汽为空的情况下,将返回一个 - 空。findFirst().or Else(null)findFirst()Optional

除非我误解了你的评论。你有没有试过这个,或者你没有尝试过?orElse(null)findFirst()


推荐