Есть метод:
public Map<String, AbstractMap.SimpleEntry<Double, Integer>> getCustomers(){
TreeMap<String, AbstractMap.SimpleEntry<Double, Integer>> goodsList = new TreeMap<>();
for (Map.Entry<Integer, ArrayList<String>> entry : treeMap.entrySet()) {
if (goodsList.containsKey(entry.getValue().get(0))){
AbstractMap.SimpleEntry<Double, Integer> sum = goodsList.get(entry.getValue().get(0));
AbstractMap.SimpleEntry<Double, Integer> count = goodsList.get(entry.getValue().get(0));
goodsList.put(entry.getValue().get(0), (new AbstractMap.SimpleEntry<>((Double.parseDouble(entry.getValue().get(3))),(Integer.parseInt(entry.getValue().get(2))))));
} else
goodsList.put(entry.getValue().get(0), (new AbstractMap.SimpleEntry<>((Double.parseDouble(entry.getValue().get(3))),(Integer.parseInt(entry.getValue().get(2))))));
}
return goodsList;
}
Метод получает из TreeMap ArrayList и сравнивает, есть ли ключ в goodsList, и если да, то надо сложить имеющийся Double с новым и также с Integer. Никак не могу из AbstractMap.SimpleEntry раздельно получить Double и занести в sum, и Integer в count.
p.s.
проблему решил, на мой взгляд не совсем красиво, но работает. значения получил циклом:
double sum = 0;
int count = 0;
for (SimpleEntry<Double, Integer> value : goodsList.values()) {
sum = value.getKey();
count = value.getValue();
}
то есть, сейчас код выглядит так:
public Map<String, AbstractMap.SimpleEntry<Double, Integer>> getCustomers(){
TreeMap<String, AbstractMap.SimpleEntry<Double, Integer>> goodsList = new TreeMap<>();
for (Map.Entry<Integer, ArrayList<String>> entry : treeMap.entrySet()) {
if (goodsList.containsKey(entry.getValue().get(0))){
double sum = 0;
int count = 0;
for (SimpleEntry<Double, Integer> value : goodsList.values()) {
sum = value.getKey();
count = value.getValue();
}
goodsList.put(entry.getValue().get(0), (new AbstractMap.SimpleEntry<>((Double.parseDouble(entry.getValue().get(3)) + sum),(Integer.parseInt(entry.getValue().get(2))) + count)));
} else
goodsList.put(entry.getValue().get(0), (new AbstractMap.SimpleEntry<>((Double.parseDouble(entry.getValue().get(3))),(Integer.parseInt(entry.getValue().get(2))))));
}
return goodsList;
}
Не хватает репутации на комментарий, спрошу здесь. Хотя не на 100% понимаю что тут вообще написано))
Зачем циклом по всем values
,бегать? Если вам вам надо только с определенным ключем. А так как у вас вы получите значения sum и count по последнему ключу.
Может так надо?
public Map<String, AbstractMap.SimpleEntry<Double, Integer>> getCustomers(){
TreeMap<String, AbstractMap.SimpleEntry<Double, Integer>> goodsList = new TreeMap<>();
for (Map.Entry<Integer, ArrayList<String>> entry : treeMap.entrySet()) {
if (goodsList.containsKey(entry.getValue().get(0))){
AbstractMap.SimpleEntry<Double, Integer> simpleEntry = goodsList.get(entry.getValue().get(0));
Double sum = simpleEntry.getKey();
Integer count = simpleEntry.getValue();
goodsList.put(entry.getValue().get(0), (new AbstractMap.SimpleEntry<>((Double.parseDouble(entry.getValue().get(3)) + sum),(Integer.parseInt(entry.getValue().get(2))) + count)));
} else
goodsList.put(entry.getValue().get(0), (new AbstractMap.SimpleEntry<>((Double.parseDouble(entry.getValue().get(3))),(Integer.parseInt(entry.getValue().get(2))))));
}
return goodsList;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как сделать такое окно, которое при нажатии на кнопку будет выводится на экран, а при нажатии на любую другую часть экрана закрывалось?
Подчеркивается choosergetSelectedFile() в songFile = chooser
Всем привет, возникает ошибка: