And*_*ose 36 java collections java-8
我有一类称为Contact
具有Date lastUpdated;
可变的.
我想拉出Contact
一个List<Contact>
有max lastUpdated
变量的东西.
我知道这可以通过编写自定义比较器并使用来完成Collections.max
,但我想知道是否有一种方法可以在Java 8中完成,不需要使用自定义比较器,因为我只想用一个我的代码中只有一个位置的最大日期,并且Contact
该类不应始终使用该lastUpdated
变量来比较实例.
Tag*_*eev 56
在Java-8中编写自定义比较器非常简单.使用:
Comparator.comparing(c -> c.lastUpdated);
Run Code Online (Sandbox Code Playgroud)
所以如果你有List<Contact> contacts
,你可以使用
Contact lastContact = Collections.max(contacts, Comparator.comparing(c -> c.lastUpdated));
Run Code Online (Sandbox Code Playgroud)
或者,使用方法引用:
Contact lastContact = Collections.max(contacts, Comparator.comparing(Contact::getLastUpdated));
Run Code Online (Sandbox Code Playgroud)
Ale*_* C. 23
并且Contact类不应总是使用lastUpdated变量来比较实例
因此,只要您想要按lastUpdated
属性比较多个实例,就必须提供自定义比较器,因为这意味着默认情况下此类与此字段不具有可比性.
Comparator<Contact> cmp = Comparator.comparing(Contact::getLastUpdated);
Run Code Online (Sandbox Code Playgroud)
如您所知,您可以使用Collections.max
或使用Stream API来根据此字段获取最大实例,但您无法避免编写自定义比较器.
Puc*_*uce 20
尝试以下(未经测试):
contacts.stream().max(Comparator.comparing(Contact::getLastUpdated)).get()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49729 次 |
最近记录: |