首页 > 解决方案 > 根据一个字段的列表从对象列表中选择一些对象

问题描述

我有一个对象数组列表,其中包含一个字段“名称”,并且我有一个名称列表。我必须从列表中选择包含任何名称的所有对象。我怎样才能最有效地在java中实现这一点。任何代码片段都将受到高度赞赏。

例子:

让类名是A

A 由 id、name、subject 等字段组成。

因此,假设我有一个
List<A> objectsA
长度为 10 的列表。在此列表中,名称字段由各种名称组成,例如 alpha、beta、gama、delta 等。

所以假设我有第二个清单

List<String> namesList = List.of("alpha","beta");

因此,我只想从 objectsA 列表中选择那些名称字段由 namesList 中的名称组成的对象,即我只想选择名称字段由“alpha”或“beta”组成的那些对象。

标签: javaobjectarraylistfilterjava-8

解决方案


如果您有 a Listof 名称,那么将其转换为 a 可能会很方便,Set以便您可以轻松检查它是否包含名称:

最终 Set<String> 名称 = 新 HashSet<>(namesList);
列表<Person> 人 = ...;
List<Person> 结果 = people.stream()
   .filter(p -> names.contains(p.getName()))
   .collect(Collectors.toList());

您可以避免使用 ,Set而只使用namesList,因为有一种List.contains方法,但是效率很低


推荐阅读