Hej musze znaleźć 5 największych liczb z listy. List<Integer>
może być różna np: wypełniona null
-ami, może być pusta, może być za mało liczb, a może też być okey. Poniżej kod - jest okey da się go uprościć coś można ulepszyć jakieś wskazówki ?. Optional
i .stream()
wykorzystać. jak coś będzie nie tak to zwrócić psutą listę. Z góry dzięki
List<Integer> firstList = new ArrayList<>();
firstList.add(null);
firstList.add(null);
firstList.add(null);
firstList.add(null);
firstList.add(null);
List<Integer> secondList = new ArrayList<>();
secondList.add(23);
secondList.add(null);
secondList.add(222);
secondList.add(17);
List<Integer> thirdList = new ArrayList<>();
thirdList.add(2);
thirdList.add(null);
thirdList.add(3);
thirdList.add(3);
thirdList.add(3);
thirdList.add(3);
thirdList.add(3);
thirdList.add(3);
List<Integer> emptyList = new ArrayList<>();
System.out.println(fiveBigestNumber(firstList));
System.out.println(fiveBigestNumber(secondList));
System.out.println(fiveBigestNumber(thirdList));
System.out.println(fiveBigestNumber(emptyList));
public static List<Integer> fiveBigestNumber(List<Integer> integerList) { //wywoałenie metody trialClassInteger , musi być >= 5 elementów jak nie to pusta lista
return Optional.ofNullable(integerList)
.map(Main2::trialClassInteger)
.filter(data -> data.size() >= 5)
.orElseGet(Collections::emptyList);
}
public static List<Integer> trialClassInteger(List<Integer> integerList) { // usuniecie nulli, od największej do najmniejszej, max 5 liczb i do listy
return integerList.stream()
.filter(Objects::nonNull)
.sorted(Comparator.reverseOrder())
.limit(5)
.collect(Collectors.toList());
}
}