比较地图值并排序

时间:2019-06-05 08:40:19

标签: java

这是我的课程

公共类人{

int id;
int salary;
Map<String,List<String>> house;
    //getter and setters omitted for brevity

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    Map<String,List<String>> map =new HashMap<>();

    map.put("KEY_1",Arrays.asList("3")  )  ;
    map.put("KEY_2",Arrays.asList("House_1") )  ;
    map.put("KEY_3",Arrays.asList("House_13")  )  ;



    Map<String,List<String>> map2 =new HashMap<>();

    map2.put("KEY_1",Arrays.asList("1") )  ;
    map2.put("KEY_2",Arrays.asList("House_2") )  ;
    map2.put("KEY_3",Arrays.asList("House_22") )  ;


    Map<String,List<String>> map3 =new HashMap<>();

    map3.put("KEY_1",Arrays.asList("2") )  ;
    map3.put("KEY_2",Arrays.asList("House_3") )  ;
    map3.put("KEY_3",Arrays.asList("House_33") )  ;


    Person p1 = new Person(1,1000, map  );

    Person p2 = new Person(2,2000, map2  );

    Person p3 = new Person(3,3000, map3 );


    List<Person> personList = new  ArrayList();
    personList.add(p1);
    personList.add(p2);
    personList.add(p3);



    for (Person p : personList)
    {

        for(Entry<String, List<String>>  personMap :  p.getHouse().entrySet()  )

        {

            System.out.println(  "value of key is -->" +  personMap.getKey() +   " value is " +  personMap.getValue()  );

        }
    }

}
}

我的要求是,首先根据KEY_1值对数据进行排序,然后根据KEY_2的值进行排序? 我该如何编写比较器或对此进行比较?

当前O / p为

value of key is -->KEY_1 value is [3]
value of key is -->KEY_3 value is [House_13]
value of key is -->KEY_2 value is [House_1]
value of key is -->KEY_1 value is [1]
value of key is -->KEY_3 value is [House_22]
value of key is -->KEY_2 value is [House_2]
value of key is -->KEY_1 value is [2]
value of key is -->KEY_3 value is [House_33]
value of key is -->KEY_2 value is [House_3]

但是我的预期输出是

  

键的值是-> KEY_1的值是[3]键的值是-> KEY_3的值   是[House_13]键的值是-> KEY_2值是[House_1]

     

键的值是-> KEY_1的值是[2]键的值是-> KEY_3的值   是[House_33]键的值是-> KEY_2值是[House_3]

     

键的值是-> KEY_1的值是[1]键的值是-> KEY_3的值   是[House_22]键的值是-> KEY_2值是[House_2]

即,如果具有key_1的对象具有最高的值,那么它应该首先出现,然后我们也需要根据KEY_2对其进行排序。

1 个答案:

答案 0 :(得分:1)

您的示例还不完整,请始终发布Minimal, Reproducible Example并提供清晰的问题描述。例如,您的getElements()方法未包括在内,而messages未定义。

但是,根据我从不完整示例中得出的结论,您想要按字符串的升序遍历地图。

为此,您必须知道Map.entrySet()返回类Set的实例,并且您使用了for-each循环,该循环使用其迭代器,并且Set的迭代器不保证任何特定的条目的迭代顺序。

但是您可以使用SortedMap类:

  

进一步提供其键的总体排序的Map。根据其键的自然顺序或通常在排序的地图创建时提供的Comparator来对地图进行排序。遍历排序后的地图的集合视图(由entrySet,keySet和values方法返回)时,将反映此顺序。提供了一些其他操作以利用订购的优势。 (此接口是SortedSet的地图类似物。)

相反,如果您想基于而不是键遍历地图,请参考现有的答案Sort a Map<Key, Value> by values