当前位置: 首页 > 知识库问答 >
问题:

Java8流API用于查找与属性值匹配的唯一对象

陈知
2023-03-14
List<Person> objects = new ArrayList<>();
List<Person> matchingObjects = objects.stream.
    filter(p -> p.email().equals("testemail")).
    collect(Collectors.toList());

但我知道它总会有一个独特的对象。我们是否可以做一些事情来代替collectors.tolist,这样我可以直接获得实际的对象,而不是获取对象列表。

共有1个答案

宣望
2023-03-14

不要使用收集器,请尝试使用findfirstfindany

Optional<Person> matchingObject = objects.stream().
    filter(p -> p.email().equals("testemail")).
    findFirst();

这将返回可选,因为列表可能不包含该对象。

如果您确信列表中总是包含您可以呼叫的人:

Person person = matchingObject.get();

如果您可以使用null引用(如果没有这样的人),则:

Person person = matchingObject.orElse(null);

如果可能的话,我会尽量避免使用null引用路由。可选类中的其他替代方法(ifpresentmap等)可以解决许多用例。我发现自己使用orelse(null)的情况是,只有在某些情况下,我的现有代码被设计为接受null引用的情况下才使用orelse(null)

选项还有其他有用的方法。看看可选的Javadoc。

 类似资料:
  • 问题内容: 使用Java 8 Stream从Collection中查找与Property值匹配的对象。 人物属性->姓名,电话,电子邮件。 遍历“人员”列表并找到与对象匹配的电子邮件。看到这可以通过Java 8流轻松完成。但这仍然会返回收藏吗? 例如: 但是我知道它将永远只有一个唯一的对象。我们可以做些什么而不是让我直接得到实际的对象。而不是获取对象列表。 问题答案: 代替使用收集器,请尝试使用或

  • 我找到了一个解决方案,但它使用Java-8。

  • 我需要根据下面的2个属性从数组中找到唯一的对象。当“类”和“票价”匹配时,我需要提取唯一的值并在结果数组中获取它们。 来源: 预期结果: 我在SO中查看并能够找到基于一个属性过滤的答案(按属性创建唯一对象数组),但无法找到基于2个属性的答案。

  • 问题内容: 我目前正在做类似物物交换系统的系统。这样的情况。客户(茉莉花)需要输入“ NAME”属性(她必须寻找的内容)并输入“ SEEK”属性(她需要寻找的内容)。为了获得结果,“ SEEK”属性必须与其他客户的“名称”属性匹配,而其他客户的“ SEEK”属性必须与Jasmine的“ HAVE”属性匹配。 例如我有表项(已经在数据库中) 例如,茉莉花具有“名称”属性的耳机和“搜索”属性的笔记本电

  • 我有两个类的结构如下: 基本上,Company类有一个Person对象列表,每个Person对象都可以获得一个标记值。 如果我得到Person对象的列表,有没有一种方法可以使用Java8中的Stream来查找所有Person对象中最常见的一个标记值(如果是并列的,可能只是最常见的一个随机标记)?

  • 我必须查询一个属性值,然后在此基础上从不同的节点找到另一个属性值。 以下是我的XML的外观: 示例:我需要查询的属性值位于第101行。我必须取引用节点的节点id,在这个例子中是“3”: 然后我需要在XML中进一步搜索,它应该找到id="3"的节点,然后寻找名为"长度"的属性,并返回它的值,在这个例子中是"10": 我已经编写了以下XSLT代码,但需要添加更多代码以正确获取长度部分: 请建议如何获得