使用自定义比较器按LocalDate对ArrayList进行排序

时间:2019-01-28 15:16:57

标签: java list sorting dictionary collections

我反序列化一些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进行排序,以便StevePeter之前。


我的方法是:

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自动生成的。

3 个答案:

答案 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()));