我有一个包含Id的对象修补程序,所以我们说它有:
public class Patch {
private Long id;
public Patch(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
}
我们说我收集了那些大小不一的补丁>因此,Collection可以包含1个Patch对象或10个Patch对象。我想获得最大补丁的id值。
换句话说,如果我有3个具有Ids的Patch对象:
patch1.getId() = 1;
patch3.getId() = 3;
patch2.getId() = 2;
然后,我想要返回的号码是3.此时,该集合没有订单。但是,每个新的Patch将始终具有比前一个大1的Id,从1开始。换句话说,如果我添加了上面的另一个补丁,则id将保证为4.如果我有10个Patch对象,最大的Id将保证为10。
我相信这样的事情会起作用,但只有一个补丁存在时可能会引起问题:
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) patches.size()
当然看起来它会非常方便......
答案 0 :(得分:3)
您需要id
,而不是Patch
,因此您应该找到最多id
,而不是最高Patch
ID。
long a = patches.stream().mapToLong(Patch::getId).max().orElse(-1);