2016-07-26 53 views
0

鉴于以下地图声明Map<Integer, List<Integer>>我想使用Java 8 streams API通过单个流迭代将所有键值对收集到List<Integer>中。例如,假设下面的映射:如何将地图键值收集到值为集合的列表中

1->[2,3] 
4->[7,8] 

结果列表将是:[1,2,3,4,7,8]

+1

不要紧,该地图项具有未定义的订单? – Silverclaw

+0

@AndyTurner我还需要将关键字放入列表中,而不仅仅是值。 –

+1

我可能会这样做,势在必行:'列表 res = new ArrayList <>(); map.forEach((key,value) - > res.add(key); res.addAll(value);});' – eckes

回答

4
List<Integer> list = map.entrySet() 
     .stream() 
     .flatMap(e -> Stream.concat(Stream.of(e.getKey()), e.getValue().stream())) 
     .collect(Collectors.toList()); 
+0

呵呵! 'Stream.concat()'刚刚添加到我的词汇:) –

相关问题