为了账号安全,请及时绑定邮箱和手机立即绑定

迭代映射列表 (List<Map<Integer,String>>) 并查找特定值?

迭代映射列表 (List<Map<Integer,String>>) 并查找特定值?

智慧大石 2021-11-24 15:41:16
我有一个地图列表。List<Map<Integer,String>> lines. 我希望遍历列表和所有映射,只查看特定的键值对,试图找到匹配的字符串值 - “hi”。示例:我只对查看特定键范围 5-10 的条目集并检查匹配值感兴趣。下面是我计划的。迭代列表的方法检查每个地图是否有任何匹配项。有没有更好或更清洁/更有效的方法呢?//basic logicfor(Map<Integer,String> map : lines){   return map.entrySet().stream()     .filter(e -> 11 > e.getKey().intValue() && e.getKey().intValue() >= 5)     .anyMatch(entry -> entry.getValue().equalsIgnoreCase("hi"));}
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

由于您已经在使用流,您还可以流式传输列表:

return lines.stream()
            .flatMap(map -> map.entrySet().stream())
            .filter(entry -> 11 > entry.getKey() && entry.getKey() >= 5)
            .anyMatch(entry -> entry.getValue().equalsIgnoreCase("hi"));

这将返回true如果有地图在列表中包含了5和10(含)之间的一个关键条目和“喜”(不区分大小写)的值,并且将返回false,否则。这是我对您最初意图的最佳猜测;如果我不正确,请告诉我。


查看完整回答
反对 回复 2021-11-24
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

如果地图相当大,我会使用user2478398的评论。如果可能,请使用SortedMapNavigableMap并且您可以轻松申请NavigableMap#subMap。然后Stream看起来像这样:

lines.stream()
     .flatMap(m -> m.subMap(5, 11).values().stream())
     .anyMatch("hi"::equalsIgnoreCase);


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信