2015-03-23 3 views
8

Там есть один класс (SomeOrders), имеет несколько полей, таких как Id, Summary, сумма .. и т.д. требования к сбору Id в качестве ключевых и Summary значений в HashMap из списка SomeOrder объектов.Как заполнить HashMap с помощью лямбда-выражения

кода в Java До 8:

List<SomeOrder> orders = getOrders(); 
Map<String, String> map = new HashMap<>(); 
for (SomeOrder order : orders) { 
    map.put(order.getId(), order.getSummary()); 
} 

Как добиться того же с лямбда-выражения в Java 8?

+1

возможно дубликат [Java: Как преобразовать список к карте] (http://stackoverflow.com/questions/4138364/java-how -to-convert-list-to-map) –

+1

Да, почти то же самое. http://stackoverflow.com/questions/4138364/java-how-to-convert-list-to-map Но выше просто спрашивается в общем, из того, что один ответ может найти с выражением Лямбда. В любом случае, спасибо, что уведомили об этом. –

+0

Не путайтесь с функциональными операциями * lambda expression * и * stream *. Я думаю, вы хотели бы получить ответ для * функциональных операций *, как ответ ниже. – Alex

ответ

19

Использование Collectors.toMap:

orders.stream().collect(Collectors.toMap(SomeOrder::getID, SomeOrder::getSummary)); 

или

orders.stream().collect(Collectors.toMap(o -> o.getID(), o -> o.getSummary())); 
+0

Что делать, если в списке заказов есть дубликаты, а на карте должен быть список для сбора сводок заказов? Список <> to Map > – prime

Смежные вопросы