Java 8 从映射中获取值列表

Java 8 从映射中获取值列表,java-8,java-stream,Java 8,Java Stream,我有一个带有键aString和List作为值的映射。我想使用Java8从该映射中获取一个针对所有键的所有值的列表。我的方法给了我一个值列表。我错误地将所有值映射到“列表”,并且列表的底层元素正在转换为单个对象。我希望它们都是列表中的单个元素 Map<String,List<String>> map = new ConcurrentHashMap<>(); List<String> myList = map.values().stream().map

我有一个带有键a
String
List
作为值的映射。我想使用Java8从该映射中获取一个针对所有键的所有值的列表。我的方法给了我一个值列表。我错误地将所有值映射到“列表”,并且列表的底层元素正在转换为单个对象。我希望它们都是列表中的单个元素

Map<String,List<String>> map = new ConcurrentHashMap<>();
List<String> myList = map.values().stream().map(List::toString).collect(Collectors.toList());
Map Map=new ConcurrentHashMap();
List myList=map.values().stream().map(List::toString.collect(Collectors.toList());

使用
flatMap
获取
映射的所有
列表
值的所有
字符串的

List<String> myList = map.values()
                         .stream()
                         .flatMap(List::stream)
                         .collect(Collectors.toList());
List myList=map.values()
.stream()
.flatMap(列表::流)
.collect(Collectors.toList());
请注意,
列表
可能包含重复项。如果希望避免这种情况,请在
.flatMap()
之后添加
distinct()
,或使用:

map.values().forEach(myList::addAll);

工作得很有魅力。不需要显式地使用流。谢谢你的建议。