使用 Java 8 Stream 从 Collection 中查找与 Property 值匹配的对象。
List<Person> objects = new ArrayList<>();
人员属性 -> 姓名、电话、电子邮件。
遍历人员列表并查找与电子邮件匹配的对象。看到这可以通过 Java 8 流轻松完成。但这仍然会返回一个集合?
前任:
List<Person> matchingObjects = objects.stream.
filter(p -> p.email().equals("testemail")).
collect(Collectors.toList());
但我知道它总会有一个独特的对象。我们可以做点什么来代替 Collectors.toList
这样我就可以直接得到实际的对象。而不是得到对象的列表。
原文由 Santosh 发布,翻译遵循 CC BY-SA 4.0 许可协议
不要使用收集器,而是尝试使用
findFirst
或findAny
。这将返回
Optional
因为列表可能不包含该对象。如果您确定列表始终包含您可以致电的那个人:
不过要小心!
get
抛出NoSuchElementException
如果没有值存在。 Therefore it is strongly advised that you first ensure that the value is present (either withisPresent
or better, useifPresent
,map
,orElse
或在Optional
类中找到的任何其他替代方案)。如果您可以接受
null
参考,如果没有这样的人,那么:如果可能的话,我会尽量避免使用
null
参考路线。 Optional 类中的其他替代方法(ifPresent
,map
等)可以解决许多用例。我发现自己使用orElse(null)
的地方只有当我有现有的代码被设计为在某些情况下接受null
引用时。Optional 还有其他有用的方法。看看 可选的 javadoc 。