遍历地图列表(List <map <integer,string >>)并查找特定值?

时间:2018-10-17 23:19:22

标签: java java-8

我有一张地图清单。 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"));
}

2 个答案:

答案 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的评论。如果可能,请使用SortedMapNavigableMap,然后可以轻松应用NavigableMap#subMap。然后Stream看起来像这样:

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