2013-08-29 62 views
0

在樹形圖中,每個鍵都有多個值。我只能得到與鍵關聯的每個值的最大值。任何人都可以幫助做..樹形圖獲得與每個鍵相關的值的最大值

BufferedReader reader = new BufferedReader(new FileReader("E:\\book\\geneanno.txt")); 
    Map<String, String> map = new TreeMap<String,String>(); 
    String currentLine; 
    while ((currentLine = reader.readLine()) != null){ 
     String[] pair = currentLine.split("\\s+"); 
     key = pair[12]; 
     value = pair[4]+" "; 
     if(map.containsKey(key)){ 
      value += map.get(key); 
     } 
      map.put(key,value); 

輸出我得到的是這樣的

重點:A1CF值:9168 7541 1478 1001

重點:B547價值:1247 7841 1247 3471

但我得只輸出這樣

重點:A1CF值:9168

注意:B547值:7841

+1

地圖中的鍵和值是什麼?你爲什麼只映射到一個'String'?你的代碼沒什麼意義。 –

+0

什麼是輸入文件內容? – iMBMT

+0

一個'TreeMap'不能有一個鍵的多個值。 – arshajii

回答

2

而不是連接String中的所有值,您可以使用TreeSet,其中元素將按其自然順序排序。

Map<String,Set<Integer>> map = TreeMap<String,TreeSet<Integer>>(); 

雖然迭代,你可以通過TreeSet#last()得到最大的價值,因爲你的價值Set自然排序。

+0

請注意,您將必須執行Integer.valueOf(pair [4])才能獲得解析的字符串作爲整數 –

+0

yaah ,是的,即使是一個好點:) –

+1

我認爲應該是'TreeSet#last()'以獲得最大值。 'first()'會給出最小值。 – yshavit

1

除了Subhrajyoti的回答。

你也可以做到以下幾點:

Map<String, Integer> map = new TreeMap<String,Integer>(); 

if(map.get(token) == null) 
{ 
    map.put(token,value) 
} 
else if(map.get(token) < newValue) 
{ 
    map.put(token,newValue) 
} 

本質上發生的事情是,你將只存儲最大的價值爲每個鍵/值對。

這個解決方案只是多一點點的內存效率。