【问题标题】:How to produce a map from a stream of the entries?如何从条目流中生成地图?
【发布时间】:2015-10-26 21:15:34
【问题描述】:

给定s,a Stream<Map.Entry<K,V>> subject to s.map(Map.Entry::getKey).distinct().count() == s.count(),我应该如何生成m,a Map<K,V> subject to m.entrySet().equals(s.collect(Collectors::toSet()))

换句话说,我应该如何从我想要的条目流中生成一个映射?

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    您可以使用Collectors.toMap,传递关键供应商和价值供应商方法,将映射条目流转换为Map

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

    【讨论】:

    • 那么流由映射条目组成的事实已经不是特别有用了?
    • @tennenrishin 正确。
    • @tennenrishin,实际上像HashMap.putAll(map) 这样的方法本质上是做类似的事情:遍历提供的映射条目集,调用getKey/getValue 并将它们放到自己身上。唯一的区别是他们可以预先调整哈希表的大小,而不是多次调整大小。
    • @Tagir Valeev:虽然现在你可以在不处理条目集的情况下做到这一点:source.forEach(target::put)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多