Собрать в древовидную карту Java 8 - PullRequest
0 голосов
/ 03 ноября 2018

Я хотел собрать результат в TreeMap<Integer,Double>, обработав TreeMap<Integer,ArrayList<String>>.

TreeMap<Integer,Double> result2 = units.entrySet().stream()
                                        .filter(v -> v.getValue().size()>3)
                                        .filter(v -> !v.getValue().get(1).isEmpty() && !v.getValue().get(2).isEmpty())
                                        .mapToDouble(v -> mult( v.getValue().get(1), v.getValue().get(2)))
                                        .collect();

В основном я делаю то, что я получаю значения из ArrayList of Strings из потока, отфильтровываю значения без значений и получаю произведение 2-го и 3-го элементов с помощью функции mult внутри лямбда-выражения. Теперь я не знаю, как собрать в TreeMap, где ключ является ключом обработанной TreeMap, называемой единицами, а значение должно быть продуктом, который я рассчитал в mapToDouble.

ПРИМЕЧАНИЕ: единицы измерения TreeMap<Integer,ArrayList<String>>

1 Ответ

0 голосов
/ 03 ноября 2018

Вы должны явно передать ссылку на конструктор TreeMap::new фабрике карт. Функция слияния - просто фиктивная, которая здесь не используется. Проверьте это,

TreeMap<Integer, Double> result2 = units.entrySet().stream().filter(v -> v.getValue().size() > 3)
        .filter(v -> !v.getValue().get(1).isEmpty() && !v.getValue().get(2).isEmpty())
        .collect(Collectors.toMap(Map.Entry::getKey,
                e -> mult(e.getValue().get(1), e.getValue().get(2))),
                (v1, v2) -> v1, TreeMap::new));

Даже если вы можете вычислить произведение двух встроенных чисел следующим образом,

TreeMap<Integer, Double> result2 = units.entrySet().stream().filter(v -> v.getValue().size() > 3)
    .filter(v -> !v.getValue().get(1).isEmpty() && !v.getValue().get(2).isEmpty())
    .collect(Collectors.toMap(Map.Entry::getKey,
        e -> Double.parseDouble(e.getValue().get(1)) * Double.parseDouble(e.getValue().get(1)),
        (v1, v2) -> v1, TreeMap::new));
...