我有一张地图清单。 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"));
}
答案 0 :(得分:2)
由于您已经在使用流,因此还可以流式传输列表:
.then()
如果列表中的任何Map的条目的键在5到10(含)之间,并且值为“ hi”(忽略大小写),则会返回return lines.stream()
.flatMap(map -> map.entrySet().stream())
.filter(entry -> 11 > entry.getKey() && entry.getKey() >= 5)
.anyMatch(entry -> entry.getValue().equalsIgnoreCase("hi"));
,并返回true
除此以外。根据您的初衷,这是我最好的猜测;如果我不正确,请告诉我。
答案 1 :(得分:2)
如果地图很大,我会接受user2478398的评论。如果可能,请使用SortedMap
或NavigableMap
,然后可以轻松应用NavigableMap#subMap
。然后Stream
看起来像这样:
lines.stream()
.flatMap(m -> m.subMap(5, 11).values().stream())
.anyMatch("hi"::equalsIgnoreCase);