我想HashMap<Integer,Linkedlist<long[]>>
从另一个嵌套的哈希图构建一个。我对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[] 数组包装成 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;
}
虽然这个版本可以工作,但在每次操作时,它都会创建一个既不必要又低效的链表:有没有办法避免创建链表并坚持原来的方法?