我反序列化一些Json并将其放入具有以下结构的模型中:
型号:
import java.time.LocalDate;
public class MyClass implements Serializable {
String name;
LocalDate date;
// more attributes
public MyClass(...) {
// ...
}
// getters & setters
}
然后我将该类放入ArrayList:List<MyClass> list = new ArrayList<>()
。
该列表如下所示:
[
{
"name": "peter",
"date": {
"year": "1984",
"month": "10",
"day": "17"
}
},
{
"name": "steve",
"date": {
"year": "1976",
"month": "05",
"day": "04"
}
}
]
我知道要按日期对list
进行排序,以便Steve
在Peter
之前。
我的方法是:
Comparator<Map<String, String>> mapComparator = (Map<String, String> m1, Map<String, String> m2) -> m1.get("date").compareTo(m2.get("date"));
Collections.sort(list, mapComparator);
但是它说:
Not suitable method found for sort(List<MyClass>,Comparator<Map<String,String>>)
请注意,date
的类型为LocalDate
,因此ArrayList中date
的“对象结构”是由Java自动生成的。
答案 0 :(得分:5)
您的比较器比较Map
。您的列表不是Map
的列表。
list.sort(Comparator.comparing(MyClass::getDate));
答案 1 :(得分:1)
问题是您使用的是Map而不是MyClass比较器。解决方法如下:
Comparator<MyClass> mapComparator = (MyClass m1, MyClass m2) -> m1.getDate().compareTo(m2.getDate());
Collections.sort(list, mapComparator);
答案 2 :(得分:1)
您可以使用compareTo
Collections.sort(list, (a,b)->a.getDate().compareTo(b.getDate()));