过滤 Multimap 中的条目以删除重复项

问题描述 投票:0回答:1

我手上有一点问题,可以帮忙...这是我的问题:

我有一个 Java 中的 Multimap,其中有很多条目。这些条目是字符串,它们看起来像这样:

URL1=URL2
URL2=URL1
URL4=URL3
URL3=URL4

如您所见,我有一些条目,其中键是值,值是它们。例如我有:

URL1=URL2
URL2=URL1

但是我的目标是消除那些“重复项”并只得到一个结果,例如:

*URL1=URL2*
。我怎样才能实现这一目标?

MultiMap 看起来像这样:

Multimap<String, String> ourToolMappings = of.finalMappings();

提前谢谢你:)

java dictionary duplicates multimap
1个回答
0
投票

创建一个中间集来存储已经看到的键值对,并在过滤时使用它,利用当您尝试添加已经存在的元素时

set.add
返回 false 的事实:

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.Multimap;

public class Example {
    
    public static void main(String[] args) throws InterruptedException {
        Multimap<String, String> ourToolMappings = ArrayListMultimap.create();

        ourToolMappings.put("URL1", "URL2");
        ourToolMappings.put("URL2", "URL1");
        ourToolMappings.put("URL4", "URL3");
        ourToolMappings.put("URL3", "URL4");

        System.out.println(ourToolMappings);

        Set<Map.Entry<String,String>> set = new HashSet<>(ourToolMappings.size());

        Multimap<String, String> filtered =
                ourToolMappings.entries()
                               .stream()
                               .filter(x -> set.add(Map.entry(x.getKey(), x.getValue())) &&
                                            set.add(Map.entry(x.getValue(), x.getKey())))
                               .collect(ImmutableListMultimap.toImmutableListMultimap(
                                       Map.Entry::getKey, Map.Entry::getValue));

        System.out.println(filtered);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.