按计数过滤 Guava HashMultimap 键

发布于 2024-12-06 19:05:24 字数 242 浏览 0 评论 0原文

我创建了以下类型的哈希多重映射:键作为一对字符串,字符串和值一样长。

HashMultimap<Pair<String, String>, Long> hm = HashMultimap.create();

我使用 put 函数在表中插入了一些值。

现在我想找到所有具有多个值的键。我想使用 for 循环来迭代所有键并找到那些具有多个值的键。请帮助我我该怎么做?

I have created a hash multi map of following type: key as a pair of string, string and value as long.

HashMultimap<Pair<String, String>, Long> hm = HashMultimap.create();

I have inserted some values in the table using put function.

Now I want to find all those keys which have multiple values. I want to use for loop to iterate over all keys and find those keys which have multiple values. Please help me how can i do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

荒人说梦 2024-12-13 19:05:24

马特已经涵盖了程序方式。更实用的方法(仍然很冗长,因为 Java 还没有闭包)是这样的:

public class MoreThanOnePredicate<T extends Map.Entry<?, ? extends Collection<?>>> implements Predicate<T> {
    public boolean apply(T entry) {
       return entry.getValue().size() > 1;
    }
}

//...
return Maps.filterEntries(hm.asMap(), new MoreThanOnePredicate<Pair<String, String>, Collection<Long>>()).keySet();

我面前没有库和编译器,所以可能存在一些未解决的泛型问题。

Matt has the procedural way covered. The more functional approach (still verbose since Java doesn't have closures yet) would be something like this:

public class MoreThanOnePredicate<T extends Map.Entry<?, ? extends Collection<?>>> implements Predicate<T> {
    public boolean apply(T entry) {
       return entry.getValue().size() > 1;
    }
}

//...
return Maps.filterEntries(hm.asMap(), new MoreThanOnePredicate<Pair<String, String>, Collection<Long>>()).keySet();

I don't have the library and a compiler in front of me so there are probably some unresolved generics problems with that.

撩起发的微风 2024-12-13 19:05:24
Set<Pair<String, String>> keysWithMultipleValues = Sets.newHashSet();

for (Pair<String, String> key : hm.keySet())
{
    if (hm.get(key).size() > 1)
    {
        keysWithMultipleValues.add(key);
    }
}
Set<Pair<String, String>> keysWithMultipleValues = Sets.newHashSet();

for (Pair<String, String> key : hm.keySet())
{
    if (hm.get(key).size() > 1)
    {
        keysWithMultipleValues.add(key);
    }
}
烟酉 2024-12-13 19:05:24

这应该比 Matt 的版本更有效,因为没有使用键查找:

Set<Pair<String, String>> r = Sets.newHashSet();
for(Entry<Pair<String, String>> e : create.keys().entrySet()) {
   if(e.getCount() > 1) r.add(e.getElement());
}

This should be a bit more efficient than Matt's version as no lookup by keys is used:

Set<Pair<String, String>> r = Sets.newHashSet();
for(Entry<Pair<String, String>> e : create.keys().entrySet()) {
   if(e.getCount() > 1) r.add(e.getElement());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文