有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何按内部键降序排序嵌套映射,然后按内部值升序排序?

例如,我有一个嵌套映射Map<String, Map<String, Integer>

(“三星”(“注”,30))

(“三星”,“银河”,20))

(“苹果”(“Iphone”,40))

我需要按内键按字母降序对地图进行排序(在本例中为模型名称)

如果两个名称相等,那么我必须按升序对内部值进行排序(在本例中为价格)

到目前为止,我的分类如下:

map.entrySet().stream.forEach(entry -> entry.getValue().entrySet().stream() .sorted(Comparator.comparing(Map.Entry::getKey, Comparator.reverseOrder()))

我知道我必须添加.thenComparing(),但我不知道下一步如何进行


共 (1) 个答案

  1. # 1 楼答案

    您可以按如下方式编写CustomComparator:

    import java.util.*;
    
    public int compare(Object obj1  , Object obj2){
    
            Map<String, Map<String, Integer> > map1 = (Map<String, Map<String, Integer>) obj1;
            Map<String, Map<String, Integer> > map2 = (Map<String, Map<String, Integer>) obj2;
            Map.Entry e1 = (Map.Entry)map1.entrySet();
            Map.Entry e2 = (Map.Entry)map2.entrySet();
            String brand1 = (String)e1.getKey();
            String brand2 = (String)e2.getKey();
            Map.Entry e3 = (Map.Entry)e1.getValue();
            Map.Entry e4 = (Map.Entry)e3.getValue();
            Integer price1 =(Integer) e3.getValue();
            Integer price2 =(Integer) e4.getValue();
    
            if(brand2.compareTo(brand1) != 0){
                return brand2.compareTo(brand1);
            }else{
                price1.compareTo(price2);
            }
          }
        }
    

    此压缩程序将首先按照品牌名称的降序对数据进行排序,如果两个品牌名称相同,则将按照价格的升序对数据进行排序

    您必须在树状图中添加数据,如下所示

    Set data = new TreeSet(new CustomComparator()); //Add your data here in data object