我有List
的{{1}},即HashMap
。我要检查此列表中是否存在某些键值。
例如:
List<Map<String, Object>> result
我希望我正在使用 anyMatch
的地图列表中至少包含一个上表条目Name Count
Marvel 10
DC 0
如何使用多个谓词?我可以有1000个Assert.assertTrue(
result.stream().anyMatch(
ag -> ( "Marvel".equals(ag.get("Name")) && 10==(int)ag.get("Count"))
));
的列表,我只想检查列表中是否有两个哈希映射包含这两个条目。
答案 0 :(得分:2)
您的数据结构似乎一开始是错误的。一个List<Map<String, Object>>
,其中每个映射表示一行,并且只有一个键和一个值?您只需要一个Map<String, Integer>
。字符串是名称,整数是计数。请记住给它起一个有意义的名称,例如comicUniverseToSuperheroFrequency
。
话虽如此,Predicate
has an and
method可用于将条件链接在一起。它可能看起来像这样:
public static void main(String[] args)
{
Map<String, Integer> comicUniverseToSuperheroFrequency = /*something*/;
boolean isMarvelCountTen = comicUniverseToSuperheroFrequency.entrySet().stream()
.anyMatch(row -> isMarvel().and(isTen()).test(row));
}
private static Predicate<Map.Entry<String, Integer>> isMarvel()
{
return row -> "Marvel".equals(row.getKey());
}
private static Predicate<Map.Entry<String, Integer>> isTen()
{
return row -> row.getValue() == 10;
}