Как значительно сократить момент с поиском максимального через сортировку массива по размерам?
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());
}
}