如何从条目流中生成地图?

Mus*_*ful 1 java java-8 java-stream

鉴于s,一Stream<Map.Entry<K,V>>s.map(Map.Entry::getKey).distinct().count() == s.count(),我应该怎么产生m,一个Map<K,V>m.entrySet().equals(s.collect(Collectors::toSet()))

换句话说,我应该如何根据我想要的条目流生成地图?

rge*_*man 6

您可以Map通过使用Collectors.toMap传递关键供应商和价值供应商方法将地图条目流转换为a .

Map<K, V> m = s.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)

  • @tennenrishin,实际上像`HashMap.putAll(map)`这样的方法基本上做了类似的事情:迭代提供的映射条目集,调用`getKey` /`getValue`并将它们放到自己身上.唯一的区别是,他们可以预先调整哈希表的大小,而不是多次调整大小. (2认同)
  • @Tagir Valeev:虽然现在你可以在不处理条目集的情况下完成它:`source.forEach(target :: put)`. (2认同)