0

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(),但我不知道下一步如何进行。

4

1 回答 1

0

您编写 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);
        }
      }
    }

此 Compactor 将首先按品牌名称的降序对数据进行排序,如果两个品牌具有相同的名称,那么它将按价格的升序排序。

您必须在 TreeMap 中添加数据,如下所示

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

于 2020-01-29T10:45:04.523 回答