在Java中,如何使用lambda同时按键和值对Map进行排序?

Map接口实现了Collection接口,该接口提供了Map数据结构的功能。 映射不包含任何重复的键,并且每个键都与一个值相关联。 我们可以使用与它们关联的键来访问和修改值。

在以下两个示例中,我们可以借助lambda表达式按键和值对Map进行排序。

使用Key对Map进行排序的示例

import java.util.*;
import java.util.stream.*;

public class MapSortUsingKeyTest {
   public static void main(String args[]) {
      
      // 根据键对映射进行排序   
      Map<Integer, String> map = new HashMap<Integer, String>();

      map.put(2, "India");
      map.put(5, "Australia");
      map.put(3, "England");
      map.put(1, "Newzealand");
      map.put(4, "Scotland");

      Map<Integer, String> sortedMap = map.entrySet().stream()
                               .sorted(Map.Entry.comparingByKey())
                               .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                               (e1, e2) -> e2, LinkedHashMap::new));
      System.out.println("Sorted Map: " + Arrays.toString(sortedMap.entrySet().toArray()));
   }
}

输出结果

Sorted Map: [1=Newzealand, 2=India, 3=England, 4=Scotland, 5=Australia]

使用值(Value)对Map进行排序的示例

import java.util.*;
import java.util.stream.*;

public class MapSortUsingValueTest {
   public static void main(String args[]) {
      
      //根据它们的值对映射进行排序    
      Map<Integer, String> map = new HashMap<Integer, String>();

      map.put(1, "Jaidev");
      map.put(2, "Adithya");
      map.put(3, "Vamsi");
      map.put(4, "Krishna");
      map.put(5, "Chaitanya");

      Map<Integer, String> sortedMap = map.entrySet().stream()
                               .sorted(Map.Entry.comparingByValue())
                               .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                               (e1, e2) -> e2, LinkedHashMap::new));
      System.out.println("Sorted Map: " + Arrays.toString(sortedMap.entrySet().toArray()));
   }
}

输出结果

Sorted Map: [2=Adithya, 5=Chaitanya, 1=Jaidev, 4=Krishna, 3=Vamsi]