Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在映射列表(List<;Map<;Integer,String>;)上迭代并查找特定值?_Java_Java 8 - Fatal编程技术网

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

Java 在映射列表(List<;Map<;Integer,String>;)上迭代并查找特定值?,java,java-8,Java,Java 8,我有一张地图清单列出行。 我希望遍历列表和所有映射,只查看特定的键-值对,试图找到匹配的字符串值-“hi” 示例:我只对查看范围为5-10的特定键的条目集感兴趣,并检查匹配的值。下面是我的计划。迭代列表检查每个映射是否有匹配项的方法 是否有更好或更清洁/有效的方法 //basic logic for(Map<Integer,String> map : lines) { return map.entrySet().stream() .filter(e -> 11

我有一张地图清单<代码>列出行。 我希望遍历列表和所有映射,只查看特定的键-值对,试图找到匹配的字符串值-“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"));
}
//基本逻辑
用于(地图:线)
{
返回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"));

如果列表中的任何映射具有键在5和10之间(包括5和10)且值为“hi”(忽略大小写)的条目,则返回
true
,否则返回
false
。这是我对你初衷的最好猜测;如果我不正确,请告诉我。

因为您已经在使用流,您也可以流式处理列表:

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

如果列表中的任何映射具有键在5和10之间(包括5和10)且值为“hi”(忽略大小写)的条目,则返回
true
,否则返回
false
。这是我对你初衷的最好猜测;如果我不正确,请让我知道。

如果地图太大,我会同意他的意见。如果可能,使用
SortedMap
NavigableMap
,您可以轻松地应用
NavigableMap\subMap
。然后,
将如下所示:

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

如果地图相当大,我会同意他的意见。如果可能,使用
SortedMap
NavigableMap
,您可以轻松地应用
NavigableMap\subMap
。然后,
将如下所示:

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


我希望遍历列表和所有映射,只查看特定的键-值对,试图找到匹配的字符串值,然后它会做什么?我只对查看5-10范围内特定键的输入集感兴趣,并检查与您刚才描述的不同的匹配值。一般来说,对于这类问题,您应该给出一个输入和输出集的示例,并解释问题中不变量的用途。似乎您需要一个区间映射。你可以尝试使用@tony你的方法应该返回什么?@flakes。是的,所以我基本上想查看列表中的所有地图,如果在本例中找到“hi”匹配项,则返回true。没有必要继续寻找。只是看看匹配的字符串是否存在。@Misha。只是返回真或假。没有包括整个方法,只是将用于检查的逻辑。但如果在整个列表中找到匹配的字符串,则基本上为真/假。我希望遍历列表和所有映射,只查看特定的键-值对,试图找到匹配的字符串值,那么它会做什么?我只对查看5-10范围内特定键的输入集感兴趣,并检查与您刚才描述的不同的匹配值。一般来说,对于这类问题,您应该给出一个输入和输出集的示例,并解释问题中不变量的用途。似乎您需要一个区间映射。你可以尝试使用@tony你的方法应该返回什么?@flakes。是的,所以我基本上想查看列表中的所有地图,如果在本例中找到“hi”匹配项,则返回true。没有必要继续寻找。只是看看匹配的字符串是否存在。@Misha。只是返回真或假。没有包括整个方法,只是将用于检查的逻辑。但如果在整个列表中找到匹配的字符串,则基本上为真/假。他们不应该在最后收集吗?这返回一个布尔值。看起来OP想要返回一个布尔值,因为他们的stream语句以
return
开头,尽管他们的循环总是在第一次迭代中终止。因为OP只对范围5-11的键感兴趣,所以您可以建议使用IntStream。可能比在所有键上循环并测试它们是否在范围内更有效。@user2478398或更短,
lines.stream().anyMatch(map->IntStream.range(5,11).mapToObj(map::get).anyMatch(“hi”::equalsIgnoreCase))。这利用了这样一个事实,即
equalsIgnoreCase
已经处理
null
参数(返回
false
)。或者,您也可以使用
lines.stream().anyMatch(map->IntStream.range(5,11).anyMatch(i->“hi”.equalsIgnoreCase(map.get(i));
对于那些不喜欢嵌套
anyMatch
s的人,惯用的解决方案是
lines.stream().flatMap->IntStream.range(5,11).mapToObj(map::get)).anyMatch(“hi”)::equalsIgnoreCase)
他们不应该最后收集
吗?这返回一个布尔值。看起来OP想要返回一个布尔值,因为他们的stream语句以
return
开头,尽管他们的循环总是在第一次迭代中终止。因为OP只对范围为5-11的键感兴趣,所以你可以建议一个IntStream。可能是mor性能优于在所有键上循环并测试它们是否在范围内。@user2478398或更短,
lines.stream().anyMatch(map->IntStream.range(5,11).mapToObj(map::get).anyMatch(“hi”::equalsIgnoreCase”);
。这利用了
equalsIgnoreCase
已经处理
null
参数的事实(返回
false
)。或者,您也可以使用
lines.stream().anyMatch(map->IntStream.range(5,11).anyMatch(i->“hi”.equalsIgnoreCase(map.get(i));
对于那些不喜欢嵌套
anyMatch
s的人,惯用的解决方案是