Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 使用flatmap的流分组_Java_Java 8_Java Stream - Fatal编程技术网

Java 使用flatmap的流分组

Java 使用flatmap的流分组,java,java-8,java-stream,Java,Java 8,Java Stream,我有列表servicesNames,ServiceName有以下结构: public class ServiceName { private Map<String, String> names; } 编辑: 我能得到这个: List collect1=服务名称 .stream() .map(x->x.getNames()) .flatMap(x->x.entrySet().stream()) .collect(Collectors.toList()); 但是,在使用flatmap

我有
列表servicesNames
,ServiceName有以下结构:

public class ServiceName {
private Map<String, String> names;
}
编辑: 我能得到这个:

List collect1=服务名称
.stream()
.map(x->x.getNames())
.flatMap(x->x.entrySet().stream())
.collect(Collectors.toList());
但是,在使用flatmap之后,您不知道如何按键对所有值进行分组…

您需要按键对值进行分组,并按键将映射应用到下游

基于lambda的方法:

Map<String, List<String>> map = servicesNames
        .stream()
        .flatMap(service -> service.getNames().entrySet().stream())
        .collect(groupingBy(e -> e.getKey(), mapping(e -> e.getValue(), toList())));
Map<String, List<String>> map = servicesNames
        .stream()
        .map(ServiceName::getNames)
        .map(Map::entrySet)
        .flatMap(Set::stream)
        .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));
Map Map=servicesNames
.stream()
.flatMap(服务->服务.getNames().entrySet().stream())
.collect(分组方式(e->e.getKey(),映射方式(e->e.getValue(),toList());
基于参考的方法:

Map<String, List<String>> map = servicesNames
        .stream()
        .flatMap(service -> service.getNames().entrySet().stream())
        .collect(groupingBy(e -> e.getKey(), mapping(e -> e.getValue(), toList())));
Map<String, List<String>> map = servicesNames
        .stream()
        .map(ServiceName::getNames)
        .map(Map::entrySet)
        .flatMap(Set::stream)
        .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));
Map Map=servicesNames
.stream()
.map(ServiceName::getNames)
.map(map::entrySet)
.flatMap(集合::流)
.collect(groupingBy(Map.Entry::getKey,mapping(Map.Entry::getValue,toList()));

如果您真的发布了编译错误,这会有所帮助。。如果我没有弄错的话,你需要
groupingBy(Entry::getKey)
。用我到目前为止得到的添加编辑-编译错误实际上是没有意义的,很多泛型和东西请包括在内。否则,很难判断错误在方法链中的确切位置弹出。如果太难理解,那么请使用不同的代码创建一个适当的版本,更好地演示该问题。我是否可以建议显示两个版本,一个只使用方法引用,另一个只使用lambdas,而不是部分以文本形式编写?仅lambda版本将
map
flatmap
组合为一个
flatmap
,而仅方法参考版本将
flatmap
拆分为
map
flatmap