You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤Google Guava Multimap中的互斥重复条目?

处理Guava ArrayListMultimap中的互斥重复条目

要移除ArrayListMultimap中像URL1=URL2和URL2=URL1这样的互相对应重复条目,可按以下思路实现:

核心逻辑

通过定义固定的筛选规则,确保每一对双向映射只保留一个方向的条目,比如基于字符串的字典序判断,或者自定义业务规则,避免重复存储。

具体代码实现

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

public class MultimapDeduplicator {
    public static void main(String[] args) {
        // 你的原始Multimap实例
        Multimap<String, String> ourToolMappings = of.finalMappings();
        
        // 初始化去重后的Multimap
        Multimap<String, String> deduplicatedMap = ArrayListMultimap.create();
        
        // 遍历所有键值对
        for (String key : ourToolMappings.keySet()) {
            for (String value : ourToolMappings.get(key)) {
                // 处理自身映射的情况(如URL=URL)
                if (key.equals(value)) {
                    deduplicatedMap.put(key, value);
                    continue;
                }
                
                // 按字典序规则保留条目:仅当键的字典序小于值时添加,同时跳过已存在的反向条目
                if (key.compareTo(value) < 0) {
                    deduplicatedMap.put(key, value);
                } else if (!deduplicatedMap.containsKey(value) || !deduplicatedMap.get(value).contains(key)) {
                    deduplicatedMap.put(key, value);
                }
            }
        }
        
        // 替换原始Multimap为去重后的结果
        ourToolMappings.clear();
        ourToolMappings.putAll(deduplicatedMap);
    }
}

关键说明

  • 字典序规则:利用compareTo方法判断字符串顺序,保证每对双向映射只保留一个,你也可以替换为自定义的比较逻辑(比如字符串长度、业务标识排序等)。
  • 重复校验:处理键序更大的条目时,先检查反向条目是否已被添加,避免重复存储。
  • 自映射兼容:单独处理key=value的情况,直接保留这类无反向重复的条目。

内容的提问来源于stack exchange,提问作者user23424056

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:24:55