[英]java comparator for two LocalDateTimes
名為MyCustomClass
的自定義類有一個屬性,它是 joda LocalDateTime
。 我需要創建一個java.util.Comparator
類,通過它們的TimeStamp
屬性( LocalDateTime
類型)比較MyCustomClass
的實例。 我已經閱讀了幾篇關於這個(包括這個)的帖子,我已經嘗試了所有的方法,但答案中顯示的方法似乎都不起作用。 例如,以下幾種方法會引發編譯錯誤:
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
類來根據它們的 Joda LocalDateTime
屬性比較MyCustomClass
的實例?
如果您只需要一個比較器實例:
類似於Iłya Bursov的回答,因為 LocalDateTime 實現了可比性,您可以使用Comparator.comparing
Comparator.comparing(MyCustomClass::getTimestamp)
LocalDateTime實現了可比較的接口,因此您可以實現如下比較器:
public class MyCustomClassComparator implements Comparator<MyCustomClass> {
@Override
public int compare(final MyCustomClass mcc1, final MyCustomClass mcc2) {
return mcc1.getTimestamp().compareTo(mcc2.getTimestamp());
}
}
鑒於 Comparator 是一個函數式接口,我們可以使用單個 lambda 表達式來實現它。
Comparator<LocalDateTime> localDateTimeComparator = (o1, o2) -> o1.compareTo(o2);
//Then use the comparator as always....
LocalDateTime minDate = dates.stream()
.min(localDateTimeComparator)
.orElseThrow(Assertion::Error)
對於重用,靜態實例可能會有所幫助
//interfaces are "more static" than classes with "static members" ;-)
public interface MyDateUtils {
Comparator<LocalDateTime> localDateTimeComparator = (o1, o2) -> o1.compareTo(o2);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.