Hashmap 升序排序

Hashmap Sorting in ascending order

public class Main {
    public static void main(String[] args)  {

        Dog dog1 = new Dog();
        dog1.setName("Lab");
        dog1.setAge(3);

        Dog dog2 = new Dog();
        dog2.setName("Beagle");
        dog2.setAge(1);

        Dog dog3 = new Dog();
        dog3.setName("Golden");
        dog3.setAge(6);

        Dog dog4 = new Dog();
        dog4.setName("German");
        dog4.setAge(4);

        Dog dog5 = new Dog();
        dog5.setName("Husky");
        dog5.setAge(2);

        List<Dog> dogList = new ArrayList<>();
        dogList.add(dog1);
        dogList.add(dog2);
        dogList.add(dog3);
        dogList.add(dog4);
        dogList.add(dog5);
        Collections.sort(dogList);
        System.out.println(dogList);

        List<Cat> catList = new ArrayList<>();
        catList.add(new Cat("cat1", 2));
        catList.add(new Cat("cat2", 6));
        catList.add(new Cat("cat3", 7));
        catList.add(new Cat("cat4", 4));
        catList.add(new Cat("cat5", 3));
        Collections.sort(catList);
        System.out.println(catList);
        
        Map<Integer, Integer> ageMap = new HashMap<>();
  }
}

排序后,我想在 HashMap - <Cat age, Dog age>.

中插入以下键值对

假设列表 catListdogList 都按年龄正确排序,地图可以用一个简单的循环填充。

for (int i = 0, n = Math.min(catList.size(), dogList.size()); i < n; i++) {
    Cat cat = catList.get(i);
    Dog dog = dogList.get(i);
    ageMap.put(cat.getAge(), dog.getAge());
}

迭代器解决方案:

Iterator<Cat> itCat = catList.iterator();
Iterator<Dog> itDog = dogList.iterator();

while (itCat.hasNext() && itDog.hasNext()) {
    ageMap.put(itCat.next().getAge(), itDog.next().getAge());
}

注意:为了保持 ageMap 中条目的顺序,最好将 HashMap 替换为按键排序的 TreeMap,或者LinkedHashMap 维护插入顺序,但在我们的例子中,插入将是有序的。

Map<Integer, Integer> ageMap = new TreeMap<>();

这是在 java 8 中执行此操作的理想方法。如有任何语法错误,我们深表歉意。

List<Dog> dogList = 
list.sort(Comparator.comparing(Dog::getAge));

List<Cat> catList = 
list.sort(Comparator.comparing(Cat::getAge));

Map<Integer, Integer> ageMap = new HashMap<>();

int index= catList.size()-1;
if(dogList.size()==catList.size()){
 dogList.forEach(dog -> {
    ageMap.put(dog.getAge(), catList.get(index).getAge());
    index--;
});
}