如何使用Java Stream实现HashMap键与嵌套Set的匹配及值一致性校验
完全可以通过 Stream API 实现该校验逻辑,核心思路是遍历嵌套集合中的每个内层Set,依次校验「包含全部key」和「对应值全相等」两个条件,只要有一个内层Set满足要求就返回true:
实现代码
boolean checkResult = set.stream() .anyMatch(innerSet -> // 条件1:HashMap的键包含当前内层Set的全部元素 hashMap.keySet().containsAll(innerSet) // 条件2:当前内层Set所有元素对应的HashMap值完全相等 && innerSet.stream().map(hashMap::get).distinct().count() == 1 );
逻辑说明
- 外层通过
anyMatch遍历嵌套Set的每一个内层集合,只要匹配到符合条件的内层集合就立即终止遍历返回true,性能更优 - 第一个判断
containsAll确保HashMap的键已经覆盖了当前内层Set的所有元素,避免后续取value时出现空值,同时也满足你要求的「包含全部3个元素」的前提 - 第二个判断将内层Set的所有元素映射为对应的HashMap值,去重后如果剩余数量为1,说明所有值完全相等
示例验证
你给出的两个测试场景都符合预期:
- 当HashMap存入
0:1、1:1、2:1时,内层集合Set.of(0,1,2)满足两个条件,最终返回true - 当HashMap存入
4:2、5:2、12:2时,没有任何一个内层集合能通过containsAll校验,最终返回false
内容的提问来源于stack exchange,提问作者lz01
相关产品推荐
相关产品推荐

