У меня есть List
из Objects
, что каждый из них содержит значение X, Y (Doubles
) и имя String
.Поскольку у меня есть несколько записей с одинаковыми именами, которые соответствуют координатам, я хочу связать каждое имя со всеми координатами, что мне удалось сделать, создав Map
типа <String, List<Object>>
Пример вывода:
One [[0.1,0.1,0.1],[0.2,0.3,0.4]]
One,Two [[0.1,0.1] ,[0.4,0.5]]
One,Two,Three [[0.1,0.1] ,[0.6,0.7]]
Теперь я хочу разделить имена с запятой ,
и получить следующий результат:
One [[0.1,0.1,0.1,0.1,0.1,0.1],[0.2,0.3,0.4,0.5,0.6,0.7]]
Two [[0.01,0.01,0.01,0.01] ,[0.4,0.5,0.6,0.7]]
Three [[0.01,0.01] ,[0.6,0.7]]
Мой код, который РАБОТАЕТ:
Map<String, List<Coordinates>> newList = coordinateList.stream()
.collect(Collectors.groupingBy(Coordinates::getName));
, который создает первый Map
.
Чтобы выполнить вторую часть, я попробовал следующее вместе с различными комбинациями, но безуспешно:
newList.entrySet().stream()
.flatMap(entry -> Arrays.stream(entry.getKey().split(","))
.map(s -> new AbstractMap.SimpleEntry<>(s, entry.getValue())))
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.flatMapping(entry -> entry.getValue().stream(), Collectors.toList())));
Я получаю сообщение об ошибке:
The method flatMapping((<no type> entry) -> {}, Collectors.toList()) is undefined for the type Collectors
Обратите внимание, что изменение flatMapping
на mapping
работает, но не решает проблему.
Еще один вариант кода, которыйЯ попробовал это:
Map<String, List<Object>> collect1 = map.entrySet().stream()
.flatMap(entry -> Arrays.stream(entry.getKey().split(","))
.map(s -> new AbstractMap.SimpleEntry<>(s, entry.getValue())))
.collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())))
.entrySet().stream()
.flatMap(entry -> entry.getValue().stream()
.flatMap(Collection::stream)
.map(o -> new AbstractMap.SimpleEntry<>(entry.getKey(), o)))
.collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));
Все еще не повезло, и я регулярно получаю ошибку Cannot infer type argument(s) for <R> flatMap(Function<? super T,? extends Stream<? extends R>>)
Есть идеи?