java - 如何从具有最大日期时间对象的列表中获取对象
问题描述
下面是我查找具有最新开始日期时间的联系人对象的代码。DateTime 显示为一个对象。
有什么方法可以使用流和比较器来简化此代码。
public ContactData getLatestContact(ContactData[] contacts) {
int latestContact = 0;
for (int i = 1; i < contacts.length; i++) {
if (DateTimeToolkit.compare(contacts[i].begin, contacts[latestContact].begin) > 0) {
latestContact = i;
}
}
return contacts[latestContact];
}
解决方案
这应该像这样完成(假设ContactData
有一个 getterbegin
字段):
public ContactData getLatestContact(ContactData ... contacts) {
return Arrays.stream(contacts)
.max(Comparator.comparing(ContactData::getBegin))
.orElse(null);
}
更新
如果字段没有 getter begin
,则方法引用应替换为 lambdad -> d.begin
public ContactData getLatestContact(ContactData ... contacts) {
return Arrays.stream(contacts)
.max(Comparator.comparing(d -> d.begin))
.orElse(null);
}
如果非常需要仅DateTimeToolkit::compare
用于比较日期时间字段,则可以使用另一个 lambda 来完成(d1, d2) -> DateTimeToolkit.compare(d1.begin, d2.begin)
:
public ContactData getLatestContact(ContactData ... contacts) {
return Arrays.stream(contacts)
.max((d1, d2) -> DateTimeToolkit.compare(d1.begin, d2.begin))
.orElse(null);
}
测试:
System.out.println(getLatestContact(
new ContactData("Jack", LocalDateTime.now().minusDays(7)),
new ContactData("Jeff", LocalDateTime.now().minusDays(3)),
new ContactData("John", LocalDateTime.now().minusDays(1))
));
输出:
ContactData(name=John, begin=2021-02-18T11:52:51.014013200)
推荐阅读
- excel - 初始化时在 Excel 用户表单内的 Google 地图上搜索城市
- java - 程序在可执行 jar 中的“new MimeMessage(session)”上退出
- javascript - 删除每个用户对象上的键值对
- javascript - 在 webpack 加载器中获取入口点名称
- sql - 窗口分析函数,其中窗口框架和顺序是不同的字段?
- javascript - 映射数组中的所有对象
- neo4j - 针对特定情况修改的度中心性
- java - lambda中的无限while循环内的Thread.sleep不需要'catch(InterruptedException)' - 为什么不呢?
- android - 如何解决“令牌检索失败:AUTHENTICATION_FAILED”?
- reactjs - ReactJS:如何使用 Formik 处理图像/文件上传?