Я вчера задал вопрос о выравнивании / группировке HashMap. Я получил отличный ответ, который предложил мне сделать это.
return new ArrayList<>(map.entrySet().stream()
.collect(Collectors.groupingBy(
Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey, Collectors.joining(","))))
.values())
Однако я бы хотел, чтобы мой список символов, разделенных запятыми, сортировался в алфавитном порядке. В комментариях предлагалось использовать TreeMap::new
в качестве аргумента для groupingBy()
, но при этом мой список символов остается несортированным:
return new ArrayList<>(map.entrySet().stream()
.collect(Collectors.groupingBy(
Map.Entry::getValue,
TreeMap::new,
Collectors.mapping(Map.Entry::getKey, Collectors.joining(","))))
.values())
Ниже мой оригинальный вопрос со ссылкой на пост.
Учитывая отображение букв на цифры, я хотел бы вернуть список строк, где каждая строка представляет собой список букв с разделителями-запятыми, сгруппированный по их ассоциированному номеру.
Для этой карты
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 4);
map.put("D", 1);
map.put("E", 1);
map.put("F", 2);
Я хотел бы вернуть список, содержащий:
"A,D,E" "B,F", "C"
Какие-либо предложения, как это можно сделать, используя функции потоковой передачи 1.8?
Как сгладить и сгруппировать этот HashMap, используя потоки?