使用Java8 Stream从列表或集合中找到最大值

时间:2019-02-11 12:31:30

标签: java java-8 java-stream

我有一个用于存储用户尝试次数的类。

public class UserAttempt() {
    private long userId;
    private long attemptNumber;

    //getters and setters
}

现在,我有以下这些对象的集合:

List<UserAttempt> userAttemptList = new ArrayList<UserAttempt>();

一个用户可能具有大量的邀请。 因此,我想使用Java 8流仅获取每个用户的最大尝试次数的集合。

1 个答案:

答案 0 :(得分:2)

您可以将travis encrypt <<password>> --com --debug 收集器与自定义合并功能一起使用,以将值收集到toMap()中,其中键是id,尝试是值:

Map

如果您只想尝试,可以调用Map<Long, UserAttempt> userIdToMaxAttempt = userAttemptList.stream() .collect(Collectors.toMap( UserAttempt::getUserId, Function.identity(), (left, right) -> left.getAttemptNumber() > right.getAttemptNumber() ? left : right )); 方法:

Map#values()