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 次 |
| 最近记录: |