Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8类型推断错误_Java_Java 8_Java Stream - Fatal编程技术网

Java8类型推断错误

Java8类型推断错误,java,java-8,java-stream,Java,Java 8,Java Stream,我尝试使用Java8流来概括我的映射转置方法。这是密码 public static <K, V> Map<V, Collection<K>> trans(Map<K, Collection<V>> map, Function<? super K, ? extends V> f,

我尝试使用Java8流来概括我的映射转置方法。这是密码

public static <K, V> Map<V, Collection<K>> trans(Map<K, Collection<V>> map,
                                                     Function<? super K, ? extends V> f,
                                                     Function<? super V, ? extends K> g) {
        return map.entrySet()
                .stream()
                .flatMap(e -> e.getValue()
                        .stream()
                        .map(l -> {
                            V iK = f.apply(e.getKey());
                            K iV = g.apply(l);
                            return Tuple2.of(iK, iV);
                        }))
                .collect(groupingBy(Tuple2::getT2, mapping(Tuple2::getT1, toCollection(LinkedList::new))));
    }

public class Tuple2<T1, T2> {

    private final T1 t1;
    private final T2 t2;

    public static <T1, T2> Tuple2<T1, T2> of(T1 t1, T2 t2) {
        return new Tuple2<>(t1, t2);
    }

    // constructor and getters omitted
}

要让它工作,我必须做什么更改?

问题是,实际上您将值作为键进行转换,反之亦然,以原始输入为准,但由于您应用的函数保留了与原始映射中相同的键值类型,因此在flatmap操作后,您将得到一个
,因此collect再次返回
映射

因此,方法头应该是:

public static <K, V> Map<K, Collection<V>> trans(Map<K, Collection<V>> map,
                                                 Function<? super K, ? extends V> f,
                                                 Function<? super V, ? extends K> g)
公共静态地图传输(地图、,

函数谢谢。我刚刚发现我不需要交换两次键/值,因为映射程序已经交换了。
public static <K, V> Map<K, Collection<V>> trans(Map<K, Collection<V>> map,
                                                 Function<? super K, ? extends V> f,
                                                 Function<? super V, ? extends K> g)