我有一个 List
的 HashMap
即 List<Map<String, Object>> result
.我想检查此列表中是否存在某个键值。
例如:
Name Count
Marvel 10
DC 0
我希望我的 map 列表应至少包含上表的一个条目,因为我正在使用 anyMatch
Assert.assertTrue(
result.stream().anyMatch(
ag -> ( "Marvel".equals(ag.get("Name")) && 10==(int)ag.get("Count"))
));
如何使用多个谓词?我可以有 1000 个列表
HashMap
,我只想检查列表中是否有任何两个哈希映射包含这两个条目。
最佳答案
您的数据结构一开始似乎是错误的。 A 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;
}
关于Java 对 anyMatch 使用多个谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52586239/