Подтвердить что ты не робот

Преобразование коллекции в карту путем ее сортировки с использованием java 8 потоков

У меня есть список, который мне нужен для пользовательской сортировки, а затем конвертировать в карту с его идентификационной картой.

Вот мой код:

Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));

Я думаю, что это сработает, но мне интересно, могу ли я избежать создания LinkedHashMap здесь и использовать фантастическое функциональное программирование для выполнения задания в одной строке.

4b9b3361

Ответ 1

У вас есть Collectors.toMap для этой цели:

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,Building::getName));

Если вы хотите принудительно создать реализацию карты, используйте следующую команду:

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,
                                  Building::getName,
                                  (v1,v2)->v1,
                                  LinkedHashMap::new));

Ответ 2

Используйте toMap() для java.util.stream.Collectors