获取Java中对象集合中的最大属性值

时间:2016-04-06 16:22:02

标签: java collections max

我有一个包含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()

当然看起来它会非常方便......

1 个答案:

答案 0 :(得分:3)

您需要id,而不是Patch,因此您应该找到最多id,而不是最高Patch ID。

long a = patches.stream().mapToLong(Patch::getId).max().orElse(-1);