Я пытаюсь узнать о потоках и столкнулся с проблемой: Я хочу получить минимальное значение списка и назначить его переменной int. Для этого я сделал следующее:Java 8 streams "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);
Это хорошо работает, и я получаю 1
в результате. Проблема заключается в том, что IDE выдает предупреждение о вызове Optional.get
перед проверкой на .isPresent
. Чтобы исправить это я использовал несколько иной метод ifPresent
и попытался следующее:
int smallest = list.stream().min(Integer::compareTo).ifPresent(integer -> integer);
К сожалению, это не работает, так как я получаю предупреждение: Bad return type in Lambda, Integer cannot be converted to void.
Мой вопрос наконец: Как я могу присвоить значение мин до переменная int smallest
С проверкой ifPresent?
Прежде всего, вам нужно понять, почему вы получаете необязательный, а не целое число: поскольку поток может быть пустым и, следовательно, может не быть минимального значения. Затем вам нужно решить, что вы хотите получить в результате, если поток пуст. Затем, как только вы знаете, что хотите, вы сможете выбрать правильный способ получить этот результат, посмотрев документацию по опции. –
'ifPresent' берет' Consumer' как свой аргумент, который потребляет входное значение и ничего не возвращает. –