我有一个对象的arraylist,其中有一个字段“name”,还有一个名称列表。我必须从列表中选择包含任何名称的所有对象。如何在java中最有效地实现这一点。任何代码片段都将受到高度赞赏。
例子:
让类名为A
A由id、name、subject等字段组成。
那么让我们假设我有一个列表
所以假设我有第二个列表
List<String> namesList = List.of("alpha","beta");
因此,我只想从objectsA列表中选择那些名称字段由名称列表中的名称组成的对象,也就是说,我只想选择那些名称字段由“alpha”或“beta”组成的对象。
如果您有一个名称列表,则可以方便地将其转换为集,以便轻松检查是否包含名称:
final Set<String> names = new HashSet<>(namesList); List<Person> people = ...; List<Person> result = people.stream() .filter(p -> names.contains(p.getName())) .collect(Collectors.toList());
您可以避免使用Set
,而只使用namesList
,因为有一个List.contains
方法,但是它会相当低效
final ArrayList<MyNamedObject> namedObjectList = ...;
final List<String> nameList = ...;
使用
namedObjectList.stream()
.filter((final MyNamedObject o) -> nameList.stream().anyMatch((final String name) -> Objects.equals(name, o.getName())))
.collect(Collectors.toList());
如果名称列表中有一些重复的值,请保留该列表,但使用。distinct()
:
namedObjectList.stream()
.filter((final MyNamedObject o) -> nameList.stream().distinct().anyMatch((final String name) -> Objects.equals(name, o.getName())))
.collect(Collectors.toList());
或创建一个集合:
final Set<String> nameSet = nameList.stream()
.distinct()
.collect(Collectors.toSet());
namedObjectList.stream()
.filter((final MyNamedObject o) -> nameSet.stream().anyMatch((final String name) -> Objects.equals(name, o.getName())))
.collect(Collectors.toList());
如果nameList
或nameSet
可以包含null
,请使用. filter(Object::nonNull)
。如果name
和o.getName()
都不能为null
,请将Objects.equals(name,o.getName()
替换为name.equals(o.getName())
。
问题内容: 如何使用JOIN从一个表中选择所有列,从另一个表中仅选择一些列?在MySQL中。 问题答案: 只需使用表名: 这将选择所有列和列和从。
嗨,我有两个对象列表。清单1和清单2 App1中的员工列表 在sql中,我们可以很容易地通过ID列进行连接。但是这里要点击seperate API来阅读清单2。 我可以从清单2创建map,并将EmpId作为键,继续从map获取对象,并将详细信息设置到清单1。 想知道有没有更好的方法来做这件事。
如果标题听起来很模糊,我很抱歉。 我有个目标- 还有这些物品的清单- 我想通过合并具有相同帐户ID的对象来操作这个列表,方法是将vat字段和总计费用字段相加,前提是它们也具有相同的发票日期。 如果两个对象具有相同的帐户ID但不同的发票日期,则它们不应合并。
我有两个对象列表,它们在两个列表中都有重复名称。我需要从清单2中删除清单1中的所有重复值。 下面是一个场景,类有名称变量,用这个变量需要检查清单1中的重复值并需要删除。 //这是具有3个对象的第一个列表 清单1大小为1 请建议我在Java8与流。
我正在尝试根据另一个列表中存在的值筛选一个列表。我已经经历了其他类似的问题,并试图利用这些来实现我的目标,但无法做到这一点。 列表1由类(L1)的对象组成 列表2由类(L2)的对象组成 因此,筛选后,列表1将不包含,因为该模型与中的不匹配。 我怎么能这么做?
假设有一个Obj类 你有一个实例列表,即