我有地图列表,我想使用键对列表中的地图进行排序。截至目前,我正在使用以下Collections.sort
方法实现此目标..
Collections.sort(listOfMaps, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
//return o1.get("cm_order_x").compareTo(o2.get("cm_order_x"));
String x1 = o1.get(Key1);
String x2 = o2.get(Key1);
String x3 = o1.get(Key2);
String x4 = o2.get(Key2);
int sComp = x1.compareTo(x2);
int sComp1 = x3.compareTo(x4);
if (sComp != 0) {
return sComp;
}
else if(sComp1 != 0) {
//return x3.compareTo(x4);
return sComp1;
}
else
{
String x5 = o1.get(Key3);
String x6 = o2.get(Key3);
return x5.compareTo(x6);
}
}
});
还有其他更好的方法可以在Java 8中对list
maps
进行排序吗?
答案 0 :(得分:3)
从Java8开始,Comparator
接口提供工厂方法和链接方法:
Comparator<Map<String, String>> c
= Comparator.comparing((Map<String, String> m) -> m.get(Key1))
.thenComparing(m -> m.get(Key2))
.thenComparing(m -> m.get(Key3))
.thenComparing(m -> m.get(Key4));
listOfMaps.sort(c);
答案 1 :(得分:0)
我相信您可以使用以下代码完成此任务:
listOfMaps.sort(Comparator.comparing(
m -> m.get("yourKey"),
Comparator.nullsLast(Comparator.naturalOrder()))
)
请参阅:How can I sort a list of maps using Java 8?
答案 2 :(得分:0)
这是不可能的,因为你根据你所知道的东西进行分类。
我的意思是您首先按Key1
进行比较,然后Key2
等进行比较。按键未在地图中编号,此处Key1
并不代表first key
,但是some key that you want compared first
。没有办法告诉java,这种行为太具体了。
你可以为通用解决方案提供一些东西(比如有更多键的地图,所以你不必像这样列出它们),但是你不会避免这个实现的主要问题。 / p>