从对象列表Java 8获取具有max date属性的对象

我有一个名为Contact的类,它有一个Date lastUpdated; 变量。

我想从具有max lastUpdated变量的List中拉出Contact

我知道这可以通过编写自定义比较器并使用Collections.max来完成,但我想知道是否有一种方法可以在Java 8中完成,不需要使用自定义比较器,因为我只想拉一个在我的代码中只有一个位置的最大日期,并且Contact类不应该总是使用lastUpdated变量来比较实例。

并且Contact类不应总是使用lastUpdated变量来比较实例

因此,只要您想通过lastUpdated属性比较多个实例,就必须提供自定义比较器,因为这意味着默认情况下此类与此字段不具有可比性。

 Comparator cmp = Comparator.comparing(Contact::getLastUpdated); 

如您所知,您可以使用Collections.max或Stream API根据此字段获取最大实例,但您无法避免编写自定义比较器。

在Java-8中编写自定义比较器非常简单。 使用:

 Comparator.comparing(c -> c.lastUpdated); 

因此,如果您有List contacts ,则可以使用

 Contact lastContact = Collections.max(contacts, Comparator.comparing(c -> c.lastUpdated)); 

或者,使用方法引用:

 Contact lastContact = Collections.max(contacts, Comparator.comparing(Contact::getLastUpdated)); 

尝试以下(未经测试):

 contacts.stream().max(Comparator.comparing(Contact::getLastUpdated)).get() 

在定义合适的Comparator之后使用List.stream().max(Comparator).get()