使用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
让我直接得到实际的对象。而不是获取对象列表。
代替使用收集器,请尝试使用findFirst
或findAny
。
Optional<Person> matchingObject = objects.stream().
filter(p -> p.email().equals("testemail")).
findFirst();
Optional
由于列表可能不包含该对象,因此返回。
如果您确定列表中总是包含该人,则可以致电:
Person person = matchingObject.get();
不过要小心!
如果不存在任何值,则get
抛出该异常NoSuchElementException
。因此,我们强烈建议您先确保该值存在(或者使用isPresent
或更好,使用ifPresent
,map
,orElse
或任何其他的替代品在发现Optional
类)。
如果null
没有这样的人,您可以参考一下,那么:
Person person = matchingObject.orElse(null);
如果可能的话,我会尽量避免使用null
参考路线。在可选类(其他替代方法ifPresent
,map
等等)可以解决许多使用情况。我发现自己使用orElse(null)
的地方只有当我拥有null
在某些情况下旨在接受引用的现有代码时。
可选还有其他有用的方法。看看Optional
javadoc
。
我找到了一个解决方案,但它使用Java-8。
但我知道它总会有一个独特的对象。我们是否可以做一些事情来代替,这样我可以直接获得实际的对象,而不是获取对象列表。
问题内容: 我目前正在做类似物物交换系统的系统。这样的情况。客户(茉莉花)需要输入“ NAME”属性(她必须寻找的内容)并输入“ SEEK”属性(她需要寻找的内容)。为了获得结果,“ SEEK”属性必须与其他客户的“名称”属性匹配,而其他客户的“ SEEK”属性必须与Jasmine的“ HAVE”属性匹配。 例如我有表项(已经在数据库中) 例如,茉莉花具有“名称”属性的耳机和“搜索”属性的笔记本电
目标 在本章节中, 我们将把calib3d模块中的特征匹配和findHomography混合在一起,以在复杂图像中找到已知对象。 基础 那么我们在上一环节上做了什么?我们使用了queryImage,找到了其中的一些特征点,我们使用了另一个trainImage,也找到了该图像中的特征,并且找到了其中的最佳匹配。简而言之,我们在另一个混乱的图像中找到了对象某些部分的位置。此信息足以在trainImag
我需要根据下面的2个属性从数组中找到唯一的对象。当“类”和“票价”匹配时,我需要提取唯一的值并在结果数组中获取它们。 来源: 预期结果: 我在SO中查看并能够找到基于一个属性过滤的答案(按属性创建唯一对象数组),但无法找到基于2个属性的答案。
问题内容: 我正在寻找一种非常快速,干净且有效的方法来获取以下JSON切片中的最大“ y”值: for-loop是解决此问题的唯一方法吗?我热衷于使用。 问题答案: 要在中找到对象的最大值: