这是我的课程
公共类人{
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对其进行排序。
答案 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。