Фильтровать список карт по значению и возвращать карту - PullRequest
0 голосов
/ 04 июня 2018

Если у меня есть List<Map<String, String>> объект, такой как этот currencyList:

0
   0 = "product_id" -> 145
   1 = "currency" -> USD
1
   0 = "product_id" -> 105
   1 = "currency" -> EUR
2
   0 = "product_id" -> 102
   1 = "currency" -> EUR

Как мне тогда фильтровать где currency=EUR?

Что-то вроде ...

List<Map<String, String>> eurCurrencyList 
             = currencyList.stream()
                           .anyMatch(map -> map.containsValue("EUR"));

но это не возвращает boolean, но возвращает map, например:

0
   0 = "product_id" -> 105
   1 = "currency" -> EUR
1
   0 = "product_id" -> 102
   1 = "currency" -> EUR

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Как мне тогда фильтровать, где валюта = EUR ?

Вы должны использовать filter, например, так:

String key = "currency", value = "EUR";
List<Map<String, String>> eurCurrencyList = currencyList.stream()
        .filter(map -> map.containsKey(key) && map.get(key).equals(value))
        .collect(Collectors.toList());

Примечание. Вместо:

map.containsValue("EUR")

Вы должны использовать:

.filter(map -> map.containsKey(key) && map.get(key).equals(value))

Необходимо проверить, содержат ли карта этот ключ и значение.

0 голосов
/ 04 июня 2018

Вам необходимо использовать filter для фильтрации и собирать в список, используя Collectors.toList().

List<Map<String, String>> eurCurrencyList = currencyList.stream()
        .filter(map -> map.containsValue("EUR"))
        .collect(Collectors.toList());

РЕДАКТИРОВАТЬ:

Если карта может иметьмного записей, может быть неэффективно использовать containsValue.Вместо этого вы можете сделать .filter(map -> map.containsKey(key) && map.get(key).equals(value)), как указано в ответе YCF_L @ .

...