【发布时间】:2016-04-07 00:27:23
【问题描述】:
我有一个包含 Id 的对象 Patch,所以假设它有:
public class Patch {
private Long id;
public Patch(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
}
假设我有一个大小 > 0 的补丁的集合。所以该集合可以包含 1 个补丁对象或 10 个补丁对象。我想获取补丁中最大的 id 值。
换句话说,如果我有 3 个带有 Id 的 Patch 对象:
patch1.getId() = 1;
patch3.getId() = 3;
patch2.getId() = 2;
那么我想返回的数字是 3。此时,集合没有顺序。但是,每个新的补丁总是有一个比前一个大 1 的 Id,从 1 开始。换句话说,如果我添加另一个具有上述内容的补丁,则 id 将保证为 4。如果我有 10 个 Patch 对象, 最大的 Id 保证为 10。
我相信这样的事情会起作用,但当只有 1 个补丁存在时可能会导致问题:
Collections.max(patches, (p1, p2) -> Long.compare(p1.getId(), p2.getId())).getId();
或
patches.stream().max((p1, p2) -> Long.compare(p1.getId(), p2.getId())).get().getId();
但是这两个似乎......过度......有没有更好的方法来做到这一点?
此外,这样做的目的是避免强制转换为 long。从技术上讲,以下方法有效,但不赞成:
(long) patches.size()
当然,这似乎非常方便......
【问题讨论】:
-
假设非空值,只需使用
Collections.max(patches, Comparator.comparing(Patch::getId)).getId();。 -
@Pillar
comparingLong(),甚至
标签: java collections max