猿问

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

我有一个地图列表。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"));

}


智慧大石
浏览 199回答 2
2回答

ABOUTYOU

由于您已经在使用流,您还可以流式传输列表:return&nbsp;lines.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(map&nbsp;->&nbsp;map.entrySet().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(entry&nbsp;->&nbsp;11&nbsp;>&nbsp;entry.getKey()&nbsp;&&&nbsp;entry.getKey()&nbsp;>=&nbsp;5) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.anyMatch(entry&nbsp;->&nbsp;entry.getValue().equalsIgnoreCase("hi"));这将返回true如果有地图在列表中包含了5和10(含)之间的一个关键条目和“喜”(不区分大小写)的值,并且将返回false,否则。这是我对您最初意图的最佳猜测;如果我不正确,请告诉我。

慕娘9325324

如果地图相当大,我会使用user2478398的评论。如果可能,请使用SortedMap或NavigableMap并且您可以轻松申请NavigableMap#subMap。然后Stream看起来像这样:lines.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(m&nbsp;->&nbsp;m.subMap(5,&nbsp;11).values().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.anyMatch("hi"::equalsIgnoreCase);
随时随地看视频慕课网APP

相关分类

Java
我要回答