两个LocalDateTimes的java比较器。

问题描述 投票:3回答:2

一个名为 MyCustomClass 有一个属性,它是正大 LocalDateTime. 我需要创建一个 java.util.Comparator 类的实例进行比较。MyCustomClass 由其 TimeStamp 属性,它的类型是 LocalDateTime. 我读了几篇关于这个问题的帖子(包括 这个),我尝试了所有的方法,但答案中显示的方法似乎都没有用。 比如下面的几种方法都会抛出编译错误。

import java.time.temporal.ChronoUnit;
import java.util.Comparator;

import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.Period;

import my.app.model.MyCustomClass;

public class MyCustomClassComparator implements Comparator<MyCustomClass>{
    public int compare(MyCustomClass mcc1, MyCustomClass mcc2) {
        //this first attempt throws a return type error for the method.
        return Period.fieldDifference(mcc2.getTimestamp(), mcc1.getTimestamp());
        //This next attempt says that LocalDateTimes are not valid arguments
        Duration.between(mcc2.getTimestamp(), mcc1.getTimestamp());
        //The next approach also says LocalDateTimes are not valid arguments.
        DateTime.parse(mcc2.getTimestamp()), mcc1.getTimestamp()).getSeconds();
        //This boilerplate approach says the minus sign is not valid for LocalDateTime
        return mcc1.getTimestamp() - mcc2.getTimestamp();
    }
}

我打算在其他代码中使用这种方法,比如:

List<MyCustomClass> mccs = new ArrayList<MyCustomClass>();
// Sort by time stamp:
Collections.sort(mccs, new MyCustomClassComparator());

我怎么写一个... Comparator 类的实例进行比较。MyCustomClass 基于他们的卓达 LocalDateTime 属性?

java time jodatime comparator
2个回答
5
投票

本地日期时间(LocalDateTime) 实施 可比 接口,所以你可以实现像比较器一样的比较器。

public class MyCustomClassComparator implements Comparator<MyCustomClass> {
    @Override
    public int compare(final MyCustomClass mcc1, final MyCustomClass mcc2) {
        return mcc1.getTimestamp().compareTo(mcc2.getTimestamp());
    }
}

2
投票

如果你需要的只是一个比较器的实例。

类似于 Iłya Bursov的答案,因为LocalDateTime实现了可比性,你可以使用 比较器.比较

Comparator.comparing(MyCustomClass::getTimestamp)
© www.soinside.com 2019 - 2024. All rights reserved.