gpt4 book ai didi

java - 交叉不同类型的集合

转载 作者:行者123 更新时间:2023-12-02 08:12:10 25 4
gpt4 key购买 nike

我有Collection<A> caCollection<B> cb , AB不共享公共(public)接口(interface),但每个接口(interface)都有一个 String属性名为 something 。我需要过滤ca并仅保留 cb 中具有“对应”值的那些元素.

不幸的是,为A创建一个通用接口(interface)和B根据this question/answer不是一个选项。

我现在正在做

Iterator<A> it = ca.iterator();
while ( it.hasNext() ) {
A a = it.next();
if ( !cb.contains(new B(a.getSomething(), ... <known stuff>) )
it.remove;
}

利用我知道什么的事实B.equals做。我可以做些什么来改善这一点,在性能和/或资源方面?

最佳答案

你能把 As 和 B 放入 Maps 中,并用字符串作为键吗?然后你可以使用 Collection.retainAll() 几次:

Map<String, A> as = new HashMap<String, A>;
for (A a: ca) as.put(a.getSomething(), a);
Map<String, B> bs = new HashMap<String, B>;
for (B b: cb) bs.put(b.getSomething(), b);
as.keySet().retainAll(bs.keySet());
ca.retainAll(as.values());

有点生气,但就是这样。

bs 可能是 Set<String>而不是 map ,但我喜欢对称性。

关于java - 交叉不同类型的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197446/

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