Java Hashmap合并功能

时间:2016-11-22 17:38:15

标签: java merge hashmap fastutil

我想从另一个嵌套的hashmap构建一个HashMap<Integer,Linkedlist<long[]>>。 我对 hashmap的合并函数有一些疑问:函数似乎只接受哪些参数类型相同的双函数。

这意味着当我使用以下方法构建此hashmap时...(使用带有两个不同类型参数的函数)

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 []数组的map2array函数到LinkedList:

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;
}

虽然这个版本有效,但在每次操作时都会创建一个链接列表,这个列表既不必要又效率低下:有没有办法避免创建链表并坚持使用原始方法?

0 个答案:

没有答案