Java 对 anyMatch 使用多个谓词

标签 java java-stream

我有一个 ListHashMapList<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/

相关文章:

java - 如何使用 JAVA 8 从 map 中获取第一个键值?

java - 使用Java8流过滤列表并获取第一个元素

java - SimpleExpandableListAdapter 和 expandedGroupLayout

java - 如何使用 Java Stream API 将 List 转换为 Map?

java - 打印出过滤流对象的一些字段

java swing jtable - 显示每行的行索引

java - 如何将 map 的 map 列表合并为 map 的 map ?

java - JMeter 插件,用于在 XSL 模板中指定的 HTML 报告中生成参数

javascript - Spring Boot 静态资源

java - 通用编程有必要吗?