Próbuję poznać strumienie i napotkałem problem: Chcę uzyskać minimalną wartość listy i przypisać ją do zmiennej typu int. Do tego zrobiłem następujące:Strumienie Java 8 "ifPresent"
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int smallest = list.stream().min(Integer::compareTo).get();
System.out.println(smallest);
Działa to dobrze, a ja dostać 1
wyniku. Problem polega na tym, że IDE daje ostrzeżenie, że Optional.get
jest wywoływane przed sprawdzeniem pod kątem .isPresent
. Aby ustalić, że użyłem nieco inną metodę ifPresent
i próbowałem następujące:
int smallest = list.stream().min(Integer::compareTo).ifPresent(integer -> integer);
Niestety to nie działa, ponieważ pojawia się ostrzeżenie: Bad return type in Lambda, Integer cannot be converted to void.
Moje pytanie brzmi: jak w końcu mogę przypisać wartość min do zmienna int smallest
WITH checking ifPresent?
Najpierw musisz zrozumieć, dlaczego otrzymujesz wartość opcjonalną, a nie liczbę całkowitą: ponieważ strumień może być pusty, a zatem może nie być żadnej wartości minimalnej. Następnie musisz zdecydować, co chcesz uzyskać, jeśli strumień jest pusty. Następnie, gdy wiesz, czego chcesz, będziesz w stanie wybrać właściwy sposób uzyskania tego wyniku, patrząc na dokumentację Opcjonalnie. –
'ifPresent' przyjmuje argument" Consumer "jako argument, który pobiera wartość wejściową i nie zwraca nic. –