gpt4 book ai didi

java - 谷歌 Guava : Supported way to get elements of a collection that comply with a given predicate?

转载 作者:行者123 更新时间:2023-11-30 04:52:18 25 4
gpt4 key购买 nike

我需要从给定特定条件的集合中提取许多唯一元素。例如。如果我有一个带有 [ (a1,t1,v1), (a2,t2,v2),...,(an,tx,vy) ] 的集合我想要 a1、t5、v8。

使用 Guava,我可以为每个元素创建一个谓词(例如 IsA1 实现谓词...),然后使用 Iterables.find(collection, predicate) 来定位每个元素。没关系,但它可能会循环遍历每个谓词的整个集合。

我可以使用 Predicates.or(...) 将谓词合并为一个,并使用 Iterables.filter,但随后我必须在结果迭代中搜索我需要的每个特定元素。

我想要一个函数 - 让我们称之为“定位” - 它将获取元素集合、谓词列表并生成(谓词 -> 元素)的映射

<T> Map<Predicate<? super T>, T> locate(Collection<T>, Collection<Predicate<? super T>)

我自己推出了,因为我找不到它,但这是一个常见的情况,我想我只是还没有找到它。

我的版本供引用:

public static <T> Map<Predicate<? super T>,T> locateUnique(Iterable<T> col, Collection<Predicate<? super T>> predicates) {
HashMap<Predicate<? super T>, T> result = Maps.newHashMap();
for (T t:col) {
for (Predicate<? super T> p:predicates) {
if (p.apply(t)){
result.put(p, t);
}
}
}
return result;
}

有没有一种现成的方法可以做到这一点?我想为了完整性应该有两个版本:

locateUnique(...) -> Map<Predicate,T>
locate(...) -> MultiMap<Predicat,T>

最佳答案

这里是 Guava 团队成员。执行此操作的首选方法正是您所描述的方式 - 滚动您自己的方法 - 尽管依赖于 Predicateequals 方法有点冒险。

不过,鉴于我们已经pretty stingy,我非常有信心这种情况远没有您描述的那么常见。关于功能性习语。

关于java - 谷歌 Guava : Supported way to get elements of a collection that comply with a given predicate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9567921/

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