如何从具有最大日期时间对象的列表中获取对象
How to get object from list with maximum date time object
下面是我的代码,用于查找具有最新开始日期时间的联系人对象。 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];
}
我假设 begin 是 java.util.Date 或任何其他可比较的?那么你可以这样做:
public ContactData getLatestContact(ContactData[] contacts) {
return Stream.of(contacts).sorted((a, b) -> DateTimeToolkit.compare(a.begin, b.begin)).findFirst().get();
}
应该这样做(假设 ContactData
有一个 getter 用于 begin
字段:
public ContactData getLatestContact(ContactData ... contacts) {
return Arrays.stream(contacts)
.max(Comparator.comparing(ContactData::getBegin))
.orElse(null);
}
更新
如果 begin
字段没有 getter,则方法引用应替换为 lambda d -> 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)
下面是我的代码,用于查找具有最新开始日期时间的联系人对象。 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];
}
我假设 begin 是 java.util.Date 或任何其他可比较的?那么你可以这样做:
public ContactData getLatestContact(ContactData[] contacts) {
return Stream.of(contacts).sorted((a, b) -> DateTimeToolkit.compare(a.begin, b.begin)).findFirst().get();
}
应该这样做(假设 ContactData
有一个 getter 用于 begin
字段:
public ContactData getLatestContact(ContactData ... contacts) {
return Arrays.stream(contacts)
.max(Comparator.comparing(ContactData::getBegin))
.orElse(null);
}
更新
如果 begin
字段没有 getter,则方法引用应替换为 lambda d -> 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)