Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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
转换地图<;字符串,NavigableMap<;长,收集<;字符串>&燃气轮机&燃气轮机;列出<;字符串>;使用Java8_Java_Java 8 - Fatal编程技术网

转换地图<;字符串,NavigableMap<;长,收集<;字符串>&燃气轮机&燃气轮机;列出<;字符串>;使用Java8

转换地图<;字符串,NavigableMap<;长,收集<;字符串>&燃气轮机&燃气轮机;列出<;字符串>;使用Java8,java,java-8,Java,Java 8,我正在尝试将Map转换为ListJava8 我写了一些代码,但中途有些地方卡住了 userTopics.values().stream().map( new Function<NavigableMap<Long, Collection<String>>, Collection<String>>() { @Override public Collection<String> apply(Naviga

我正在尝试将
Map
转换为
List
Java8

我写了一些代码,但中途有些地方卡住了

userTopics.values().stream().map(
    new Function<NavigableMap<Long, Collection<String>>, Collection<String>>() {
        @Override
        public Collection<String> apply(NavigableMap<Long, Collection<String>> t) {
            return null;  //TODO
        }
    }
);
userTopics.values().stream().map(
新函数(){
@凌驾
公开募捐申请(NavigableMap t){
返回null;//TODO
}
}
);
只需:

List values=nestedMap.entrySet()
.stream()
.map(map.Entry::getValue)
.flatMap(m->m.entrySet().stream())
.map(map.Entry::getValue)
.flatMap(集合::流)
.collect(toList());
正如所指出的,这更为整洁:

List<String> values = nestedMap.values()
        .stream()
        .flatMap(m -> m.values().stream())
        .flatMap(Collection::stream)
        .collect(toList());
List values=nestedMap.values()
.stream()
.flatMap(m->m.values().stream())
.flatMap(集合::流)
.collect(toList());

两个
flatmap
就可以了,先展平
NavigableMap
,然后展平
集合
内部

List<String> result = mapOfMaps.values()
            .stream()
            .flatMap(v -> v.values().stream())
            .flatMap(Collection::stream)
            .collect(Collectors.toList());
List result=mapOfMaps.values()
.stream()
.flatMap(v->v.values().stream())
.flatMap(集合::流)
.collect(Collectors.toList());

一个有趣的反模式,甚至两次
entrySet().stream().map(map.Entry::getValue)
而不是首先在所需项目上进行流式处理:
values().stream()
@cody123:它与
.map(Entry->Entry.getValue())
相同,其中
Entry
的类型为
map.Entry
。当您在中间流操作中也需要键时,通过
entrySet().stream()
对条目进行流式处理并在需要值流时映射到值是正确的解决方案。但是,当您只需要这些值时,您可以首先对这些值进行右流处理。
List<String> result = mapOfMaps.values()
            .stream()
            .flatMap(v -> v.values().stream())
            .flatMap(Collection::stream)
            .collect(Collectors.toList());