首页 > 解决方案 > 按值过滤地图列表并返回地图

问题描述

如果我有这样的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

然后我如何过滤 where currency=EUR

就像是...

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

但这不会返回 aboolean而是返回map这样的:

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

标签: javajava-8java-stream

解决方案


然后如何过滤货币= 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))

您必须检查地图是否包含该键和值。


推荐阅读