从Optional <object>

时间:2017-03-23 13:14:56

标签: java java-stream optional

所以我创建了一个来自列表的流,但我在将<ObjectType>,转换为ObjectType sco = getList().stream() .filter(p -> p.getValue() == value) .findFirst(); //also tried .orElse(null); 时遇到了一些问题:我尝试过:

SELECT COUNT(POSTBUMP.postId) 
FROM post 
INNER JOIN POSTBUMP ON POSTBUMP.postId = postID AND userID = 1
WHERE datecreated < '2017-01-01' AND 
groupID IN (SELECT groupid FROM groupmember WHERE userid = 1)
ORDER BY COUNT(POSTBUMP.postId) DESC
请问,有人愿意建议我哪里出错吗? (如果之前有人问过我,我很抱歉,但我无法找到关于这个特定主题的讨论(或者不知道要搜索的正确术语)。

提前致谢!

2 个答案:

答案 0 :(得分:8)

findFirst()会为您提供Optional,然后您必须决定如果不存在该怎么做。因此findFirst().orElse(null)应该为您提供对象,如果它不存在则为null

可以只在.get()上执行Optional,但这可能会被视为不良做法,因为如果get() Optional会抛出异常没有内容。您通常应断言Optional的存在/不存在并决定在每种情况下该做什么(这就是为什么它在那里 - 以便您知道某些内容真正可选你必须确定要做什么)

如果您要对对象存在执行操作,并且您不想对缺席执行任何操作,则可以调用.ifPresent()并提供lambda作为一个论点。如果存在,将使用包含的对象调用它。

答案 1 :(得分:1)

我想你可能正在寻找findFirst().or Else(null)。 <{1}}将返回findFirst() - 空的情况下为空。

除非我误解了你的评论。您是否尝试过此操作,或者在没有Optional的情况下尝试orElse(null)