【问题标题】:How to do Map<K, V> from Stream<Tuple2<K, V>> in java stream API?如何在 Java 流 API 中从 Stream<Tuple2<K, V>> 执行 Map<K, V>?
【发布时间】:2018-11-09 10:11:35
【问题描述】:

哦。我有 Java 8 并想收集一个

Map<K, V> 

来自

Stream<Tuple2<K, V>>

由于语法冗长,我不想使用 Pair。有什么办法吗

.collect(toMap(Tuple2::_1, Tuple2::_2))

感谢

【问题讨论】:

  • .collect(toMap(Tuple2::_1, Tuple2::_2)) 有什么问题?那是什么Tuple2 类?
  • 哦...谢谢你。 Tuple2 是从类似 vavr scala 的库中导入的。我会用pair做的。
  • @ernest_k 我认为问题在于您无法使用方法引用的语法访问字段值。
  • @flakes 也许吧。在不知道 Tuple2 是哪个类的情况下,很难判断 _1_2 是否不是方法......
  • @ernest_k 啊没关系,它看起来既是一个字段又是一个方法名!

标签: java dictionary tuples java-stream collect


【解决方案1】:

AFAIK,这在 java 中是无法避免的(与在 scala 中完成的方式相比。

但是,如果您要在代码中使用大量元组映射转换并希望避免冗长的语法,您可以创建自定义 TupleCollector 并添加 toMap 方法。

这可能是你进入 scala 的壁橱。

static class TupleCollector {
        public static <K, V, T extends Tuple2<K, V>> Collector<T, ?, Map<K, V>> toMap() {
            return Collectors.toMap(T::_1, T::_2);
        }
    }

要调用的代码

import static TupleCollector.toMap
...
myStream.collect(toMap());

PS: 再说一次,如果这没有通过代码审查阶段,我不会感到惊讶

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2013-12-20
    • 2019-10-10
    • 2011-04-21
    相关资源
    最近更新 更多