0

HashMap<Integer,Linkedlist<long[]>>別のネストされたハッシュマップからを構築したい。hashmap のマージ関数について疑問があります。この関数は、引数が同じ型の 2 つの関数のみを受け入れるようです。

これは、次のアプローチを使用してこのハッシュマップを作成すると... (異なる型の 2 つの引数を取る関数を使用する) ことを意味します。

private static long[] map2longarray(Int2IntMap map){
    //convert hashmap into a long array
}

private static void writeQueryTrace(Long2ObjectOpenHashMap<Int2ObjectOpenHashMap<Int2IntLinkedOpenHashMap>> fqt){
    Int2ObjectOpenHashMap<LinkedList<long[]>> toPrint = new Int2ObjectOpenHashMap<>();
    Int2ObjectOpenHashMap<Int2IntLinkedOpenHashMap> pairQID;
    Int2IntLinkedOpenHashMap QIdDocId;

    for(long pair: fqt.keySet()){
        pairQID = fqt.get(pair);
        for(int qID: pairQID.keySet()) {
            toPrint.merge(qID, map2longarray(pairQID.get(qID)), UnigramQualityModel::mergeList); //<-------ERROR HERE!!!!

        }

    }
}

private static LinkedList<long[]> mergeList(long [] a, LinkedList<long[]> longs) {
    longs.addLast(a);
    return longs;
}

...次のエラーが表示されます。

Invalid method reference: LinkedList<long[]> cannot be converted to long[]

この時点で、long[] 配列を LinkedList にラップする map2array 関数を変更しました。

private static LinkedList<long[]> map2longarray(Int2IntMap map){
    //convert the map into a long array but WRAPPING IT IN A LINKED LIST
}



  private static void writeQueryTrace(Long2ObjectOpenHashMap<Int2ObjectOpenHashMap<Int2IntLinkedOpenHashMap>> fqt){
//same function as before
   }



private static LinkedList<long[]> mergeList(LinkedList<long[]> a, LinkedList<long[]> longs) {
    longs.addLast(a.getFirst());
    return longs;
}

このバージョンは機能しますが、操作のたびにリンク リストが作成されますが、これは不要で非効率的です。リンク リストの作成を回避し、元のアプローチに固執する方法はありますか?

4

0 に答える 0