首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迭代映射列表(List<Map<Integer,String>>)并查找特定值?

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

Stack Overflow用户
提问于 2018-10-18 07:19:22
回答 2查看 231关注 0票数 0

我有一张地图清单。List<Map<Integer,String>> lines。我希望迭代列表和所有映射,只查找特定的键-值对,试图找到匹配的字符串值- "hi“。

示例:我只对查看范围为5-10的特定关键字的条目集感兴趣,并检查匹配的值。下面是我的计划。遍历列表的方法检查每个映射是否有匹配。

有没有更好的或者更干净更有效的方法呢?

代码语言:javascript
运行
复制
//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"));
}
EN

回答 2

Stack Overflow用户

发布于 2018-10-18 07:26:08

既然你已经在使用streams了,你也可以对列表进行流式处理:

代码语言:javascript
运行
复制
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之间(包括5和10)且值为"hi“(忽略大小写)的条目,将返回true,否则将返回false。这是我对你的初衷的最好的猜测;如果我错了,请让我知道。

票数 2
EN

Stack Overflow用户

发布于 2018-10-18 16:12:38

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

代码语言:javascript
运行
复制
lines.stream()
     .flatMap(m -> m.subMap(5, 11).values().stream())
     .anyMatch("hi"::equalsIgnoreCase);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档