从对象列表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
,则可以使用
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
。