java - 根据一个字段的列表从对象列表中选择一些对象
问题描述
我有一个对象数组列表,其中包含一个字段“名称”,并且我有一个名称列表。我必须从列表中选择包含任何名称的所有对象。我怎样才能最有效地在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”组成的那些对象。
解决方案
如果您有 a List
of 名称,那么将其转换为 a 可能会很方便,Set
以便您可以轻松检查它是否包含名称:
最终 Set<String> 名称 = 新 HashSet<>(namesList); 列表<Person> 人 = ...; List<Person> 结果 = people.stream() .filter(p -> names.contains(p.getName())) .collect(Collectors.toList());
您可以避免使用 ,Set
而只使用namesList
,因为有一种List.contains
方法,但是效率很低
推荐阅读
- sql-server - 存储过程的跨数据库执行
- visual-studio-code - VS Code,在文件符号之间导航
- python - mitmproxy & python - 忽略所有带有 https/ssl 的主机
- python - 有人可以帮我在 Pandas Python 的样式点更正我的以下代码吗
- azure-devops - 如果构建依赖于已从组织中删除的用户所拥有的 Azure 工件源,会发生什么情况?
- ups - 从 UPS API 调用中取回标签
- vue.js - 基本安装后无法在任何子组件中访问 this.$store (vuex)
- pointers - DP / DF 指针汇编
- android - 收到来自urbanairship android的推送通知时获取channel = null
- javascript - 我可以在不使用“eval”的情况下在变量中捕获“for”语句的返回值吗?