Map
s неотъемлемо НЕСОРТИРОВАННАЯ. Тот факт, что первая карта сортируется, просто случайно. Например.
Map<String, Integer> map1 = new HashMap<>();
map1.put("Four", 4);
map1.put("One", 1245598);
map1.put("two", 0);
map1.put("three", 1);
map1.put("Six", 6);
приведет
map1={Six=6, Four=4, One=1245598, two=0, three=1}
Чтобы получить отсортированный карту, вам нужно использовать специальный тип карты, такие как TreeMap
. Вы можете указать компаратор для TreeMap
, который позволяет сортировать второй Map
на основе значений первой карты.
Map<String, Integer> map1 = new TreeMap<>();
map1.put("One", 1245598);
map1.put("two", 0);
map1.put("three", 1);
Map<String,Boolean> map2 = new TreeMap<>(Comparator.comparing(map1::get).reversed());
map2.put("One",true);
map2.put("two", false);
map2.put("three", true);
System.out.println("map1="+map1);
System.out.println("map2="+map2);
Выход:
map1={One=1245598, three=1, two=0}
map2={One=true, three=true, two=false}
Однако обратите внимание, что обновления к первой карте может сломаться второй.
Comparator.comparing(map1::get).reversed()
только короткий путь, чтобы создать компаратор в Java 8:
Comparator.comparing(func)
Создает Comparator
, который сравнивает 2 объекта путем сравнения результатов применения func
к тем объектам, т.е. стоимость, полученная от метода compare(o1, o2)
этого Comparator
, составляет
func.apply(o1).compareTo(func.apply(o2))
map1::get
- метод ссылки на метод get
от map1
. Учитывая значение o1
, он вернется map1.get(o1)
. Сочетание этих 2 фактов возвращаемого типа компаратора, созданный поэтому
map1.get(o1).compareTo(map1.get(o2))
comparator.reversed()
просто возвращает Comparator
для обратной последовательности для заказа вместо сортировки по возрастанию по убыванию.
Как вы отсортировали «HashMap»? Они неупорядочены, поэтому это бессмысленно.Каков был порядок сортировки для map1? Как «один», «три», «два» «спускаются»? Они выглядят довольно неупорядоченными для меня. – Andreas
В чем смысл «сортировать мою вторую карту на основе первой карты» на основе ключей, значений или чего-то другого? – ead