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
。