按日期属性对对象列表进行排序

Spa*_*key 3 java sorting localdate

我有一个包含两个 LocalDate 属性的对象:

public class SomeObject {
    private LocalDate startDate;
    private LocalDate endDate;
}
Run Code Online (Sandbox Code Playgroud)

为简洁起见省略了构造函数和内容。我想按开始日期对这些对象的列表进行排序,然后将下一个对象的开始日期分配给前一个对象的结束日期。为了澄清,我从这些对象的列表开始:

SomeObject object1 = new SomeObject(LocalDate.parse("2015-01-01"), null);
SomeObject object2 = new SomeObject(LocalDate.parse("2014-01-01"), null);
SomeObject object3 = new SomeObject(LocalDate.parse("2016-01-01"), null);

List<SomeObject> list = Arrays.asList(object1, object2, object3);
Run Code Online (Sandbox Code Playgroud)

排序后它应该返回这个:

for (SomeObject object : list) {
    System.out.println(object.startDate.toString() + " " + object.endDate.toString() );
}

2014-01-01 2015-01-01
2015-01-01 2016-01-01
2016-01-01 null
Run Code Online (Sandbox Code Playgroud)

每个列表最多只包含 3 或 4 个这些对象,但代码可能必须处理数以万计的这些列表,所以我正在寻找一种有效的方法来做到这一点。

小智 6

您可以将 Collections.sort 与 Comparator 一起使用。在带有 Lambda 的 Java 8 中,它看起来像这样:

    Collections.sort(list, (x, y) -> x.startDate.compareTo(y.startDate));

    for (int i = 0; i < (list.size() - 1); i++) {
        list.get(i).endDate = list.get(i + 1).startDate;
    }
Run Code Online (Sandbox Code Playgroud)

  • 更好的是:`Collections.sort(list, Comparator.comparing(obj -&gt; obj.startDate));`。 (2认同)

Mor*_*ndi 5

作为对已接受答案的增强:

Collections.sort(list, Comparator.comparing(SomeObject::getStartDate));

Run Code Online (Sandbox Code Playgroud)