Я хочу отсортировать LinkedHashMap, который имеет LinkedList<Integer>
в качестве ключа и float[]
в качестве значения.
Например, скажем, у меня есть такой LinkedHashMap, как это:
LinkedHashMap<LinkedList<Integer>, float[]> hm = new LinkedHashMap<>();
LinkedList<Integer> linkedlist;
linkedlist = new LinkedList<>();
linkedlist.add(10);
linkedlist.add(7);
hm.put(linkedlist, new float[]{0.14f, 1.2f, 85.01f});
linkedlist = new LinkedList<>();
linkedlist.add(0);
linkedlist.add(41);
hm.put(linkedlist, new float[]{10.3f, 50.05f, 9.9f});
linkedlist = new LinkedList<>();
linkedlist.add(210);
linkedlist.add(3);
hm.put(linkedlist, new float[]{17.0f, 4.0f, 2.1f});
Что теперь Я хочу, чтобы выходные данные были:
{0, 41}, {10.3f, 50.05f, 9.9f}
{10, 7}, {0.14f, 1.2 f, 85.01f}
{210, 3}, {17.0f, 4.0f, 2.1f}
Но когда я использую предложенное решение (предложенное некоторыми из вас в раздел комментариев, в котором говорится, что он является дубликатом другого поста, который уже имеет правильный ответ - тот, что ниже, ссылка на него здесь ), где он создал новый LinkedHashMap (потому что я не знаю, как отсортировать оригинальный LinkedHashMap на месте этим кодом, к сожалению) вот так:
LinkedHashMap<LinkedList<Integer>, float[]> sortedMap = new LinkedHashMap<>();
hm.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
hm = sortedMap;
My NetBeans 8.0.2 показывает мне ошибку о строке .sorted(Map.Entry.comparingByKey())
говоря:
incompatible types: inference variable K has incompatible bounds
equality constraints: LinkedList<Integer>
upper bounds: Comparable <? super K>
where K,V are type-variables:
K extends Comparable<? super K> declared in method <K,V>comparingByKey()
V extends Object declared in method <K,V>comparingByKey()
I подумал, может быть, по какой-то причине значения в LinkedList неверны, поэтому я проверил это так, и это показывает, что все они верны (я проверил только первые 50 записей, так как в списке есть ху их сотни):
for (int i = 0; i < hm.size(); i++) {
if (i < 50) {
for (Map.Entry<LinkedList<Integer>, float[]> entry : hm.entrySet()) {
LinkedList<Integer> k = entry.getKey();
System.out.println(k);
}
}
}