Как значительно сократить момент с поиском максимального через сортировку массива по размерам?

public class FactsMethods {

public static List<UserModel> getUsers(List<FactModel> facts) {
    List<UserModel> users = facts
            .stream()
            .map(FactModel::getUser)
            .collect(Collectors.toList());
    return dropDuplicates(users);
}


private static List<UserModel> dropDuplicates(List<UserModel> users) {
    return users
            .stream()
            .distinct()
            .filter(Objects::nonNull)
            .collect(Collectors.toList());
}


public static List<List<FactModel>> sortFacts(List<FactModel> facts, List<UserModel> users) {
    return compareFactsByUsers(sortAllFactsByUsers(facts, users));
}


private static List<List<FactModel>> sortAllFactsByUsers(List<FactModel> facts, List<UserModel> users) {
    return users.stream()
            .map(user -> sortedFactsByUser(facts, user))
            .collect(Collectors.toList());
}



private static List<FactModel> sortedFactsByUser(List<FactModel> facts, UserModel user) {
    return facts
            .stream()
            .filter(fact -> user.equals(fact.getUser()))
            .collect(Collectors.toList());
}


private static List<List<FactModel>> compareFactsByUsers(List<List<FactModel>> facts) {
    return facts
            .stream()
            .sorted(((o1, o2) -> o2.size() - o1.size()))
            .collect(Collectors.toList());
}

}


Ответы (0 шт):