我有一个地图列表。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
,否则。这是我对您最初意图的最佳猜测;如果我不正确,请告诉我。
慕娘9325324
TA贡献1783条经验 获得超4个赞
如果地图相当大,我会使用user2478398的评论。如果可能,请使用SortedMap
或NavigableMap
并且您可以轻松申请NavigableMap#subMap
。然后Stream
看起来像这样:
lines.stream() .flatMap(m -> m.subMap(5, 11).values().stream()) .anyMatch("hi"::equalsIgnoreCase);
添加回答
举报
0/150
提交
取消