Treemap获取与每个键关联的值的最大值

时间:2013-08-29 16:46:52

标签: java

在树形图中,我有每个键都有多个值。我必须只获得与密钥相关的每个值的最大值。任何人都可以帮忙做到这一点..

  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

2 个答案:

答案 0 :(得分:2)

您可以使用String代替连接TreeSet中的所有值,而不是使用其自然顺序对元素进行排序。

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

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

答案 1 :(得分: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)
}

基本上发生的事情是,您只会为每个键/值对存储最大值。

这个解决方案只是更有效的内存。