如果我有一个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
答案 0 :(得分:4)
您需要使用filter
进行过滤,并使用Collectors.toList()
收集列表。
List<Map<String, String>> eurCurrencyList = currencyList.stream()
.filter(map -> map.containsValue("EUR"))
.collect(Collectors.toList());
修改强>
如果地图可以包含许多条目,则使用containsValue
可能效率低下。相反,您可以按YCF_L@'s answer中提到的.filter(map -> map.containsKey(key) && map.get(key).equals(value))
进行操作。
答案 1 :(得分:4)
如何过滤货币 = 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))
您必须检查地图是否包含该键和值。