2016-02-03 2 views
-1

У меня есть список, который выглядит следующим образом:Стрим списка карт с условием

List<Map<String, String>> listOfMaps; 

Из этого списка, я хочу, чтобы извлечь только несколько карт на основе данного состояния. Обычно я писал бы вот так:

for(Map m : listOfMaps) { 
    if(m.get("someValue").equals("someOtherValue")) { 
      resultMap.put(m.get("a"), m.get("b")) 
    } 
} 

Я хотел бы написать это с использованием потоков java8.

+0

'Map resultMap = listOfMaps.stream() фильтр (т -> m.get ("SomeValue") .equals ("someOtherValue")). collect (toMap (m -> m.get ("a"), m -> m.get ("b"))); ' –

ответ

1

Вы можете довольно просто переписать свой цикл как операцию потока.

listOfMaps.stream() 
    .filter(m -> m.get("someValue").equals("someOtherValue")) 
    .forEach(m -> resultMap.put(m.get("a"), m.get("b"))); 

Не уверен, в частности, что это заставляет вас.

1

Я думаю, вы могли бы собрать все результаты новой карты:.

Map<String, String> resultMap = listOfMaps.stream() 
    .filter(m -> "someOtherValue".equals(m.get("someValue"))) 
    .collect(Collectors.toMap(
     m -> m.get("a"), 
     m -> m.get("b"))); 
Смежные вопросы