转换Map <string,navigablemap <long,=“”collection <string =“”>&gt;&gt;使用Java8列出<string>

时间:2016-02-28 12:27:28

标签: java java-8

我正在尝试将Map<String, NavigableMap<Long, Collection<String>>>转换为List<String> Java 8。

我写了一些代码,但在中间的某些地方卡住了。

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
        }
    }
);

2 个答案:

答案 0 :(得分:4)

只需flatMap that s**t

List<String> values = nestedMap.entrySet()
        .stream()
        .map(Map.Entry::getValue)
        .flatMap(m -> m.entrySet().stream())
        .map(Map.Entry::getValue)
        .flatMap(Collection::stream)
        .collect(toList());

正如Holger指出的那样,这更整洁:

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

答案 1 :(得分:3)

两个flatMaps会做,将NavigableMap弄平,然后将Collection放平。

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