代码之家  ›  专栏  ›  技术社区  ›  Igor Yudnikov

如何在javastreamapi中从Stream<Tuple2<K,V>>映射<K,V>?

  •  -2
  • Igor Yudnikov  · 技术社区  · 6 年前

    哦。我有Java 8,想收集

    Map<K, V> 
    

    Stream<Tuple2<K, V>>
    

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

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

    塔克斯

    1 回复  |  直到 6 年前
        1
  •  2
  •   Kishore Bandi    6 年前

    就我所知 ,这在java中是无法避免的( 与scala中的方法相比。

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

    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());
    

    再说一次,如果这不能通过代码审查阶段,我也不会感到惊讶