Как получить ключ и значение из AbstractMap.SimpleEntry<Double, Integer>

143
05 апреля 2022, 11:50

Есть метод:

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;
}
Answer 1

Не хватает репутации на комментарий, спрошу здесь. Хотя не на 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;
    }
READ ALSO
Как сделать всплывающее окно в Android?

Как сделать всплывающее окно в Android?

Как сделать такое окно, которое при нажатии на кнопку будет выводится на экран, а при нажатии на любую другую часть экрана закрывалось?

101
chooser.getSelectedFile() и getName не работают

chooser.getSelectedFile() и getName не работают

Подчеркивается choosergetSelectedFile() в songFile = chooser

171
Проверка вводимых данных BufferedReader

Проверка вводимых данных BufferedReader

Начал изучать джавуДобрался до ввода с консоли

217