У меня есть 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;
}
Мне нужна помощь, чтобы преодолеть некоторые пробелы здесь. Есть лучший способ сделать это?
Во-первых, no 'Map' - в том числе' TreeMap' - может иметь несколько значений для одного и того же ключа. Во-вторых, нет способа поиска ключа по определенному индексу. Возможно, вы ищете «Multimap» или «Map>». –
Используйте map.keySet(), чтобы получить набор ключей на карте, но, как @LouisWasserman, вы не можете иметь одинаковые ключи на карте. Вам нужно изменить свой код, чтобы использовать другую структуру данных. Вы можете использовать карту для хранения текущего среднего значения, но не для исходного набора данных. – lreeder
'Есть ли лучший способ сделать это?' Я так не думаю, что код кажется хорошим и читаемым, –