2013-10-02 7 views
1

У меня есть TreeMap, который хранит ключи и значения что-то вроде этого:Средние значения тримапы, основанные на Кис

key value 
ko4 23 
ko4 53 
ko4 34 
po1 100 
po1 8 
po1 90 
po3 99 
po3 234 
po3 34 

Я хочу взять среднее значение каждого ключа (и в конечном итоге распечатать их в новый файл). Поэтому я бы сделал средние значения и поместил их на другую карту HashMap для этого, потому что мне нужно будет сортировать значения до того, как я распечатаю их в новый файл. Новая карта будет выглядеть примерно так:

Key Value 
ko4 36.6 
po1 66 
po3 122.3 

Я пытаюсь получить эту работу, но я с трудом. Может быть, я преувеличиваю. Вот что у меня есть.

 Map<String, Integer> map = new TreeMap<String, Integer>(); 
     int sum = 0; 
     int average; 
     int number = 1; 
     map.put(key, value); //I actually read in a file to do this, but so it is reproducible I have it like this, people can put in whatever they please 
     String lastkey = map.key(0);//I don't know if I can get key somehow 

     for (int i = 0;i < map.size();i++){ //for the size of the map 
     thiskey = map.key(i); 
     if (thiskey.equals(lastkey)){ //if it is the same key as the last one 
      if (i == 0){ 
       sum = map.get(i); 
      }else{ 
       sum = sum + map.get(i); //add the values 
       number++; 
      } 
     average = sum/number; 
     }else{ 
      lastkey = thiskey; 
     } 

Мне нужна помощь, чтобы преодолеть некоторые пробелы здесь. Есть лучший способ сделать это?

+2

Во-первых, no 'Map' - в том числе' TreeMap' - может иметь несколько значений для одного и того же ключа. Во-вторых, нет способа поиска ключа по определенному индексу. Возможно, вы ищете «Multimap» или «Map >». –

+0

Используйте map.keySet(), чтобы получить набор ключей на карте, но, как @LouisWasserman, вы не можете иметь одинаковые ключи на карте. Вам нужно изменить свой код, чтобы использовать другую структуру данных. Вы можете использовать карту для хранения текущего среднего значения, но не для исходного набора данных. – lreeder

+0

'Есть ли лучший способ сделать это?' Я так не думаю, что код кажется хорошим и читаемым, –

ответ

0

// Couldnt пост этот ответ в комментариях, как это было слишком большим, слишком быть размещены в комментариях, но надеюсь, что это поможет вам

государственной статической силы основных (String [] арг) {

//initialize variables 
    HashMap<String,ArrayList<Integer>> hm=new HashMap(); 
    ArrayList<Integer> values=new ArrayList<Integer>(); 
    values.add(0); 
    values.add(1); 
    values.add(2); 
    hm.put("ko4", values); 
    System.out.println(hm.get("ko4").get(0));//prints index 0 
    System.out.println(hm.get("ko4").get(1));//prints index 1 
    System.out.println(hm.get("ko4").get(2));//prints index 2 

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