2016-04-21 17 views
1

Ich habe eine Liste von Hunden Entities, dass das Feld "Birthday".Die älteste DateTime in einer Liste abrufen?

enthält Ich mag würde eine Methode in der Entity-Klasse haben, die nur die ältesten DateTime in der Liste zurück.

Wie kann ich das tun?

Entity:

@Entity 
@Table(name = "DOG") 
public class Dog 
{ 

//some other fields 

@Column(name = "BIRTHDAY") 
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
    private DateTime birthday; 

Beispiel Liste:

private List<Dog> dogList; 
+2

vergleichbare Schnittstelle implementieren . Überschreiben compareTo Methode. Überschreiben Sie Gleichheit und Hashcode. Reverse Sortierung Liste und Holen Sie sich das oberste Element. –

+0

Bitte geben Sie ein Beispiel für diese – java123999

+0

@sidgate, die eine C# Antwort ist, das ist Java – java123999

Antwort

2

In Java 8 einen Strom und einen Lambda mit dem Komparator zu erzeugen, dann den Geburtstag von den Optional erhalten:

public static DateTime getOldestDogsBirthday(final Collection<? extends Dog> dogs) { 
    return dogs.stream().min((d1, d2) -> d1.getBirthday().compareTo(d2.getBirthday())).get().getBirthday(); 
} 

Update: Noch prägnantes Beispiel basiert auf Vorschlag in den Kommentaren getBirthday als Methode Referenz in Comparator.comparing geben zu verwenden:

return dogs.stream().min(Comparator.comparing(Dog::getBirthday)).get().getBirthday(); 
+0

Danke, wie kann ich die älteste DateTime in einer Methode zurückgeben? – java123999

+0

Das ist gut. Knackig. –

+0

Ich verstehe nicht, warum es 3. GetBirthday-Methoden gibt? – java123999

0

Hier ist ein Beispiel ohne Lambada Ausdrücke:

public DateTime findOldestDogsBirthday() { 
    Collections.sort(dogList, new Comparator<Dog>() { 
     @Override 
     public int compare(Dog o1, Dog o2) { 
      DateTime d1 = o1.getBirthday(); 
      DateTime d2 = o2.getBirthday(); 
      return d1.compareTo(d2); 
     } 
    }); 
    return !dogList.isEmpty() ? dogList.get(0).getBirthday() : null; 
} 
Verwandte Themen