Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 8 使用Java8流过滤映射值_Java 8 - Fatal编程技术网

Java 8 使用Java8流过滤映射值

Java 8 使用Java8流过滤映射值,java-8,Java 8,我有一个映射,如下所示,希望使用键检索内部映射的值 <bean id="testMap" class="java.util.HashMap"> <constructor-arg> <map> <entry key="A" value="AA" /> <entry key="B"> <map> <entry key="B1"

我有一个映射,如下所示,希望使用键检索内部映射的值

<bean id="testMap" class="java.util.HashMap">
    <constructor-arg>
      <map>
        <entry key="A" value="AA" />
        <entry key="B">
          <map>
            <entry key="B1" value="B11" />
            <entry key="B2" value="B22" />
            <entry key="B3" value="B33" />
          </map>
        </entry>
      </map>
    </constructor-arg>
  </bean>
你能试试这个吗?
myMap
.entrySet().stream()
.filter(map->map.getKey().equals(“B”))
.values().forEach(value->System.out.println(value))

你能试试这个吗?
myMap
.entrySet().stream()
.filter(map->map.getKey().equals(“B”))

.values().forEach(value->System.out.println(value))

答案没有大多数使用嵌套地图的人想要的那么简单,因为你有一个
地图

重新创建您描述的地图:

Map<String,Object> map = new HashMap<>();
Map<String,String> bMap = new HashMap<>();
bMap.put("B1", "B11");
bMap.put("B2", "B22");
bMap.put("B3", "B33");

map.put("A", "AA");
map.put("B", bMap);

评论中提供了一个更短更快的解决方案:

((Map<String,String>)map.get("B")).values().stream() 
    .forEach(System.out::println);
((Map)Map.get(“B”).values().stream()
.forEach(System.out::println);

在上述解决方案中,它只对地图条目进行一次查找,而不是线性搜索,即速度更快。

答案没有大多数人使用嵌套地图所寻找的简单,因为你有一个
地图

重新创建您描述的地图:

Map<String,Object> map = new HashMap<>();
Map<String,String> bMap = new HashMap<>();
bMap.put("B1", "B11");
bMap.put("B2", "B22");
bMap.put("B3", "B33");

map.put("A", "AA");
map.put("B", bMap);

评论中提供了一个更短更快的解决方案:

((Map<String,String>)map.get("B")).values().stream() 
    .forEach(System.out::println);
((Map)Map.get(“B”).values().stream()
.forEach(System.out::println);

在上述解决方案中,它只对地图条目进行一次查找,而不是线性搜索,即速度更快。

过滤器之后
@RobinTopper能否请您提供带有.flatMap()的示例代码在
过滤器之后
@RobinTopper能否请您提供带有.flatMap()的示例代码没有
值()
这是一个问题还是一个答案?没有
values()
方法这是问题还是答案?关于
((Map)Map.get(“B”)).values().stream().forEach(System.out::println)如何?…并执行单个查找而不是线性搜索。您可以将其添加到您的答案中。
((Map)Map.get(“B”)).values().stream().forEach(System.out::println)如何?…并执行单个查找而不是线性搜索。您可以将其添加到答案中。
((Map<String,String>)map.get("B")).values().stream() 
    .forEach(System.out::println);