2014-09-01 4 views
-4

я есть Связанная хэш-картаудалить дубликаты строк в LinkedHashMap

LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap(); 

, чьи набор ключей и значений, являются

50,Tam,medicine = 7 
50,Pep,surgery = 3 
50,Tam,surgery = 6 
50,Ery,treatment = 2 
60,cap,treatment = 3 
60,syn,treatment = 5 
60,syn,surgery = 6 
60,pep,surgery = 5 
60,pep,medicine = 3 

мне нужно сгруппировать это основанный на первой строке т.е. ул [0]. затем удалите набор ключей, у которых либо str [1], либо str [2] повторяются и имеют наибольшее значение. некоторые вещи, как организовать его в порядке возрастания и удалить набор ключей, str [1] или str [2] повторяются и имеют наибольшее значение.

окончательный вывод должен быть

50,Ery,treatment=2 
50,Pep,surgery=3 
50,Tam,surgery=6 //should be deleted as in group 50 "surgery" is repeated above 
50,Tam,medicine=7 
60,cap,treatment=3 
60,pep,medicine=3 
60,pep,surgery=5 //should be deleted as in group 60 "pep" is repeated above 
60,syn,treatment=5 //should be deleted as in group 60 "treatment" is repeated above 
60,syn,surgery=6 

public static LinkedHashMap sortHashMapByValuesD(Map passedMap) { 
     List mapKeys = new ArrayList(passedMap.keySet()); 
     List mapValues = new ArrayList(passedMap.values()); 
     Map<String, Integer> dUnique = new LinkedHashMap<>(); 
     Collections.sort(mapValues); 
     Collections.sort(mapKeys); 

     LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap(); 

     Iterator valueIt = mapValues.iterator(); 
     while (valueIt.hasNext()) { 
      Object val = valueIt.next(); 
      Iterator keyIt = mapKeys.iterator(); 

      while (keyIt.hasNext()) { 
       Object key = keyIt.next(); 
       String comp1 = passedMap.get(key).toString(); 
       String comp2 = val.toString(); 

       if (comp1.equals(comp2)) { 
        passedMap.remove(key); 
        mapKeys.remove(key); 
        sortedMap.put((String) key, (Integer) val); 
        break; 
       } 

      } 

     } 
     for (String sorted : sortedMap.keySet()) { 
      String[] dsort = sorted.split(","); 
      // System.out.println(sorted + sortedMap.get(sorted)); 


      if (dUnique.get(dsort[0]) == null) { 
       dUnique.put(sorted, sortedMap.get(sorted)); 
       System.out.println(dUnique.keySet()); 
      } else { 
       for (int i = 1; i < dsort.length; i++) { 
        if (dUnique.get(dsort[i]) == null) { 
         dUnique.put(sorted, sortedMap.get(sorted)); 
        } else { 
         dUnique.remove(sorted); 
        } 
       } 
      } 
     } 
     System.out.println(dUnique.keySet()); 
     return sortedMap; 
    } 
+1

Что вы попробовали? – Ozzy

+0

i сначала отсортировал его в порядке возрастания, затем сгруппировал его по первому элементу, а затем попытался удалить набор ключей. – Raj

+0

Но здесь нет проблемы решить; вы только просили разрешения. Если вам нужна помощь быстрее, вам нужно задать конкретные вопросы о том, что не так с вашим решением и какие сообщения об ошибках (если они есть). – Ozzy

ответ

1

Этот код может помочь вам:

public static LinkedHashMap<String, Integer> sortHashMapByValuesD(LinkedHashMap passedMap) { 
    LinkedHashMap temp = passedMap; 
    LinkedHashMap<String, Integer> dUnique = new LinkedHashMap(); 
    Iterator it=temp.keySet().iterator(); 
    Map hp = new HashMap(); 
    while(it.hasNext()){ 
     String key = (String)it.next(); 
     String preKey = key.substring(0,key.lastIndexOf(",")); 
     if(!hp.containsKey(preKey)){ 
      dUnique.put(key, (Integer)temp.get(key)); 
     } 
     hp.put(preKey,preKey); 
    } 

    return dUnique; 

} 

удачи.

Смежные вопросы