2016-04-21 45 views
1

我有狗Entities列表包含現場"Birthday".在列表中獲取最早的DateTime?

我想有隻返回列表中的最古老的DateTime實體類的方法。

我該怎麼做?

實體:

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

//some other fields 

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

列表的例子:

private List<Dog> dogList; 
+2

實現可比接口。重寫compareTo方法。覆蓋equals和hashcode。反向排序列表並獲取最上面的元素。 –

+0

請舉一個這樣的 – java123999

+0

@sidgate的例子,這是一個C#的答案,這是java – java123999

回答

2

在Java 8中使用流和拉姆達創造比較,然後得到從Optional生日:

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

更新:甚至更​​簡潔例如基於建議在註釋中使用getBirthday作爲傳入Comparator.comparing的方法參考:

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

謝謝,我怎樣才能返回方法中最古老的DateTime? – java123999

+0

這很好。脆。 –

+0

我不明白爲什麼有3個.getBirthday方法? – java123999

0

這裏是沒有蘭巴達表達式的例子:

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; 
}