如何根据hashmap中的值合并键?

时间:2015-09-14 04:41:39

标签: java hashmap treemap

我想知道是否有办法根据Hashmap中的相同值将密钥合并在一起。 防爆。

A->2
B->1
C->2

我要找的结果是:

2 - A, C
1 - B

1 个答案:

答案 0 :(得分:0)

HashMap Reversal

HashMap<String,Integer> aHM = new HashMap<String,Integer>();
HashMap<Integer,ArrayList<String>> aHMrev = new HashMap<Integer,ArrayList<String>>();
//HashMap Reversal
for (String f : aHM.keySet()){
    if(aHMrev.get(aHM.get(f)) != null){
        ArrayList<String> al = aHMrev.get(aHM.get(f));
        al.add(f);
        aHMrev.put(aHM.get(f), al);
    }
    else{
        ArrayList<String> al = new ArrayList<String>();
        al.add(f);
        aHMrev.put(aHM.get(f), al);
    }
}

示例

    aHM = [LMWEB1B-VMH.log=Group1,PLMWEB1E-VMH.csv=Group3, 
    LMWEB1A-VMH.log=Group1,
    LMWEB1E-VMH.log=Group2,
    PLMWEB1D-VMH.csv=Group3,
    LMWEB1F-VMH.log=Group2,
    PLMWEB1C-VMH.csv=Group3,
    PLMWEB1A-VMH.csv=Group2,
    PLMWEB1B-VMH.csv=Group3,
    PLMDB1-VMH.csv=Group2,
    LMWEB1D-VMH.log=Group1,
    PLMWEB1F-VMH.csv=Group3,
    LMWEB1C-VMH.log=Group1]

    aHMrev = {
    Group1=[LMWEB1B-VMH.log, LMWEB1A-VMH.log, LMWEB1D-VMH.log,LMWEB1C-VMH.log],
    Group2=[LMWEB1E-VMH.log, LMWEB1F-VMH.log,PLMWEB1A-VMH.csv,PLMDB1-VMH.csv],
    Group3=[D:\Trash\Logs\Perfmon\PLMWEB1E-VMH.csv,PLMWEB1D-VMH.csv,PLMWEB1C-VMH.csv,PLMWEB1B-VMH.csv,PLMWEB1F-VMH.csv]}