遍历映射列表(列表<映射<整数,字符串>>)并查找特定值?



我有一个地图列表。List<Map<Integer,String>> lines. 我希望遍历列表和所有映射,只查看特定的键值对,试图找到匹配的字符串值 - "hi"。

示例:我只对查看特定键范围 5-10 的条目集并检查匹配项的值感兴趣。以下是我的计划。一种循环访问列表的方法,检查每个映射是否有任何匹配项。

有没有更好或更清洁/更有效的方法?

//basic logic
for(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"));
}

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

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

如果列表中的任何 Map 具有键介于 5 和 10(含(之间且值为"hi"(忽略大小写(的条目,这将返回true,否则将返回false。这是我对你初衷的最佳猜测;如果我不正确,请告诉我。

如果地图相当大,我会使用 user2478398 的评论。如果可能,请使用SortedMapNavigableMap,您可以轻松应用NavigableMap#subMap。然后Stream将如下所示:

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

最新更新