簡體   English   中英

Java 8類型推斷錯誤

[英]Java 8 type inference error

我試圖使用Java 8流來推廣我的地圖轉置方法。 這是代碼

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
}

但是我收到了這條錯誤消息

Error:(66, 25) java: incompatible types: inference variable K has incompatible bounds
    equality constraints: V
    lower bounds: K

我需要改變它才能發揮作用?

問題是你實際上將值轉換為原始輸入的鍵和副詞,但由於你應用的函數保留了與原始映射中相同的鍵值類型,因此最終得到一個Stream<Tuple2<V, K>>在flatmap操作之后,collect再次返回Map<K, Collection<V>>

所以方法標題應該是:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM