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

4

2 回答 2

2

String您可以使用TreeSetwhere 元素将使用其自然顺序进行排序,而不是连接所有值。

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

在迭代时,您可以通过 获得最大值TreeSet#last(),因为您的值Set是自然排序的。

于 2013-08-29T16:52:50.327 回答
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)
}

本质上,您将只存储每个键/值对的最大值。

这个解决方案只是稍微提高了内存效率。

于 2013-08-29T17:01:56.107 回答