我手上有一点问题,可以帮忙...这是我的问题:
我有一个 Java 中的 Multimap,其中有很多条目。这些条目是字符串,它们看起来像这样:
URL1=URL2
URL2=URL1
URL4=URL3
URL3=URL4
如您所见,我有一些条目,其中键是值,值是它们。例如我有:
URL1=URL2
URL2=URL1
但是我的目标是消除那些“重复项”并只得到一个结果,例如:
*URL1=URL2*
。我怎样才能实现这一目标?
MultiMap 看起来像这样:
Multimap<String, String> ourToolMappings = of.finalMappings();
提前谢谢你:)
创建一个中间集来存储已经看到的键值对,并在过滤时使用它,利用当您尝试添加已经存在的元素时
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);
}
}