我的理解是:
1.两个map都有A时,先比A再比B最后比C;
2.两个map都没有A时,先比B再比C;
3.两个map只有一个有A时,记有A的为mapA,没有A的为map,则
(1)mapA的B比map的B大,map优先;
(2)mapA的B比map的B小,mapA优先;
(3)mapA的B与map的B相等,mapA优先;
public static void main(String[] args) {
List<HashMap<String, Integer>> list1 = new ArrayList<>();
list1.add(createHashMap(1, 20200101, 93000));
list1.add(createHashMap(2, 20200101, 83001));
list1.add(createHashMap(3, 20200102, 153030));
List<HashMap<String, Integer>> list2 = new ArrayList<>();
list2.add(createHashMap(null, 20200101, 83002));
list2.add(createHashMap(null, 20200101, 84015));
list2.add(createHashMap(null, 20200102, 153100));
list2.add(createHashMap(null, 20200102, 153200));
List<HashMap<String, Integer>> allList = new ArrayList<>();
allList.addAll(list1);
allList.addAll(list2);
Collections.sort(allList, comparator);
System.out.println();
allList.forEach(data -> {
String valueA = data.containsKey("A") ? data.get("A").toString() : " ";
System.out.println(valueA + " " + data.get("B") + " " + data.get("C"));
});
}
public static HashMap<String, Integer> createHashMap(Integer a, int b, int c) {
HashMap<String, Integer> hashMap = new HashMap<>();
if (a != null) {
hashMap.put("A", a);
}
hashMap.put("B", b);
hashMap.put("C", c);
return hashMap;
}
public static Comparator<HashMap<String, Integer>> comparator = (a, b) -> {
int Bcompare = a.get("B").compareTo(b.get("B"));
if (a.containsKey("A") && b.containsKey("A")) {
int Acompare = a.get("A").compareTo(b.get("A"));
return Acompare == 0 ? (Bcompare == 0 ? a.get("C").compareTo(b.get("C")) : Bcompare) : Acompare;
} else if (a.containsKey("A") && !b.containsKey("A")) {
return a.get("B") > b.get("B") ? 1 : -1;
} else if (!a.containsKey("A") && b.containsKey("A")) {
return a.get("B") < b.get("B") ? -1 : 1;
} else {
return Bcompare == 0 ? a.get("C").compareTo(b.get("C")) : Bcompare;
}
};
按照楼主给出的数据,输出结果为:
将3 20200102 153030改为0 20200102 153030,输出结果为: