gpt4 book ai didi

java - 基于其他一些列表属性集合从 List 中提取对象

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:15 25 4
gpt4 key购买 nike

我有课-

public class Data implements Identifiable{
private Integer id;

public Integer getId(){
return id;
}
}

现在我有两个系列-

List<Data> data1 = // few hundred Objects

Set<Integer> dataIds = // few object ids

我想提取 List<Data>来自 data1dataIds 中有 ID

我的方法应该如何?我的类路径中有 guava,因此如果性能/效率相当,可以使用 guava 的函数式方法。

最佳答案

除非您只想对结果进行一次迭代,或者您需要一个可重用的实时过滤 View ,否则您可能需要一个包含匹配项的非 View 列表。创建 ListSet存储结果然后遍历数据列表并添加匹配项是一种非常好的方法并且易于理解!

List<Data> result = Lists.newArrayList();
for (Data data : data1) {
if (dataIds.contains(data.getId()))
result.add(data);
}

我看到你的 Data类实现了一个 Identifiable界面。鉴于此,您可以创建一个 Function<Identifiable, Integer>获取 ID... Identifiables.getIdFunction()或者其他的东西。这很好,因为它可能在其他各种地方很有用(我在博客文章 here 中讨论了这种方法)。有了这个,用 Guava 做这件事也将相当简单:

Predicate<Identifiable> predicate = Predicates.compose(
Predicates.in(dataIds), Identifiables.getIdFunction());
List<Data> filtered = Lists.newArrayList(Iterables.filter(data1, predicate));

这在功能上基本上等同于第一个示例,但似乎更难理解。由于这样做没有任何明显的好处(与您只想使用实时取景的情况不同),我的建议是只使用第一个。

关于java - 基于其他一些列表属性集合从 List<X> 中提取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com