所以我创建了一个来自列表的流,但我在将<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
请问,有人愿意建议我哪里出错吗?
(如果之前有人问过我,我很抱歉,但我无法找到关于这个特定主题的讨论(或者不知道要搜索的正确术语)。
提前致谢!
答案 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)
?