2015-09-08 2 views
1

Пользовательский класс, называемый MyCustomClass, обладает свойством joda LocalDateTime. Мне нужно создать класс java.util.Comparator, чтобы сравнить экземпляры MyCustomClass от их TimeStamp объекта, который имеет тип LocalDateTime. Я прочитал несколько сообщений об этом (включая this one), и я пробовал все методы, но ни один из методов, показанных в ответах, не работает. Например, следующие несколько подходов бросить ошибки компиляции:Java-компаратор для двух LocalDateTimes

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 на основе их Joda LocalDateTime Недвижимость?

+3

Не '' LocalDateTime' уже Comparable'? Разве вы не можете использовать 'mcc1.compareTo (mcc2)'? – MadProgrammer

+0

Проверьте это: http://stackoverflow.com/questions/13764106/comparing-two-dates-using-joda-time –

+0

Или удалите «Компаратор» в целом ... – MadProgrammer

ответ

2

LocalDateTime реализует comparable интерфейс, так что вы можете реализовать компаратор, как:

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

@MadProgrammer напишите это в комментарии за 8 минут до того, как вы разместили свой комментарий, как будто это ваш собственный ответ. – CodeMed

+0

@CodeMed да, он предоставил ключ, я опубликовал полностью работающее проверенное решение –

+2

Вы должны быть ирландским или шотландским. Попытка определить 'lass'. Остальные из нас имеют больше «класса», чем это. Мы знаем, что колдуны не могут быть подсчитаны. ;-) – Andreas