2013-09-10 50 views
1

嗨,如何在地圖離開絃樂的最大值

我有不合邏輯的字符串列表,例如:

Scanner s = new Scanner(
       "m29 523\n" + 
       "b34 827\n" + 
       "p42 235\n" + 
       "b34 294\n" + 
       "t78 421\n" + 
       "t78 673\n" + 
       "c93 173\n" + 
       "k46 925\n" + 
       "k46 322\n" + 
       "x21 644\n"); 

那麼我想打破字符串中的兩個部分 - 前和空間後, ,刪除重複項,並在重複項(b34,t78,k46)中只留下最大值(空白後)。我的意思是這樣的輸出:

   "m29 523" 
       "b34 827" 
       "p42 235" 
       "t78 673" 
       "c93 173" 
       "k46 925" 
       "x21 644" 

至於兩個部分打破和消除我用這樣的代碼複製,它的確定對我來說:

Map<String, ArrayList<String>> list = new HashMap<String, ArrayList<String>>(); 
     while (s.hasNext()){ 
      String key = s.next(); 
      if(!list.containsKey(key)); 
       list.put(key, new ArrayList<String>()); 
      list.get(key).add(s.next()); 
     } 
     System.out.println(list); 

但不明白我怎麼會在這裏可以實現的比較字符串的第二部分獲得最大值?的Integer.parseInt(list.get(鍵))?

回答

1

我不認爲你需要使用ArrayList的複雜化。
只需使用Hashmap即可。
這裏是實現簡單的代碼。

Map<String, Integer> map = new HashMap<String, Integer>(); 
     while(s.hasNext()) { 
      String key = s.next(); 
      int value = Integer.parseInt(s.next()); 
      if(map.containsKey(key)) { 
       if(value>map.get(key)) 
        map.put(key, value); 
      }else map.put(key, value); 
     } 
     System.out.println("Map="+map); 
    } 
+0

謝謝,真的很簡單=)。這幫助了我。 – devger

2

如何簡單比較:如果密鑰存在,則使用密鑰獲取值。使用Math.MAX將該值與新值進行比較,然後使用該鍵重新插入。該值將被最大值覆蓋。

Map<String, Integer> list = new HashMap<String, Integer>(); 

String key="FOO"; 
String s[]={"123","012","789"}; 
for(String numStr: s) 
{ 
    int value = Integer.parseInt(numStr); 
    if(!list.containsKey(key)) 
     list.put(key, value); 
    else 
     list.put(key, Math.max(value, list.get(key))); 
} 
System.out.println(list.get(key)); 

結果是789