В ближайшее время я планирую написать серию статей о java 9. Хотя java 9 не является основной версией java, как Java 8 или Java 11, все же есть много функций, на которые стоит обратить внимание. Жду ваших подписок.Ява 9 напишу в серию статей,около десяти статей.Эта статья седьмая статья.
java.util.Optional
Это новый класс в версии Java 8, который может в определенной степени решить проблему NullPointException в процессе программирования. В Java 9 к этому классу были добавлены некоторые методы для улучшения, давайте взглянем на него вместе и, кстати, рассмотрим его использование в Java 8.
1. ifPresentOrElse в Java9 (потребитель, исполняемый)
1.1 Улучшения в Java 9
Этот новый метод выполнит данное действие Consumer, если присутствует значение, в противном случае запустит данное действие Runnable. Следующий код сначала использует поток Java 8 для фильтрации кратных 3, а затем находит первое кратное 3 с помощью findFirst. Если такое значение найдено, выведите его в консоль, если такого значения не найдено, выведите «Не найдено кратное 3»
Семантику ifPresentOrElse(Consumer, Runnable) можно интерпретировать следующим образом: ifPresent — это Consumer, OrElse — это Runnable. Это усовершенствование только для Java 9.
IntStream.of(1, 2, 4)
.filter(i -> i % 3 == 0)
.findFirst()
.ifPresentOrElse(System.out::println, () -> {
System.out.println("没有找到3的倍数");
});
В числах 1, 2 и 4 нет кратных 3, поэтому вывод выглядит следующим образом.
没有找到3的倍数
Если был отфильтрован следующий массив 2,6,8, окончательный вывод консоли: 6
IntStream.of(2, 6, 8)
.filter(i -> i % 3 == 0)
.findFirst()
.ifPresentOrElse(System.out::println, () -> {
System.out.println("没有找到3的倍数");
}); // 6
1.2 Просмотрите написанное на Java 8
Java 8 Optional.isPresent():
При использовании Java 8 нетifPresentOrElse(Consumer,Runnable)
метод, вы должны написать тот же код, что и выше: пишите if и else, судите сами. Тот же вывод: не найдено число, кратное 3
OptionalInt opt = IntStream.of(1, 2, 4)
.filter(i -> i % 3 == 0)
.findFirst();
if (opt.isPresent()) {
System.out.println(opt.getAsInt());
} else {
System.out.println("没有找到3的倍数");
}
Java 8 Optional.ifPresent():
ifPresent()
Метод не предоставляет необязательное действие, когда значение не существует. Таким образом, после выполнения следующего кода нет действия orElse и вывода, что не очень удобно.
IntStream.of(1, 2, 4)
.filter(i -> i % 3 == 0)
.findFirst()
.ifPresent(System.out::println);
Java 8 Optional.orElse():
orElse()
Метод дает значение по умолчанию после того, как значение возвращает пустое значение. Значение по умолчанию -1 указано в приведенном ниже коде.
int result = IntStream.of(1, 2, 4)
.filter(i -> i % 3 == 0)
.findFirst()
.orElse(-1);
System.out.println(result); //-1
2. Необязательный.или(Поставщик) Java9
Этот метод создает новый необязательный элемент, если значение не найдено. Следующий код фильтрует массив ['a', 'b', 'c'], isDigit судит, есть ли в массиве числовые символы, очевидно, что нет, поэтому findFirst не может найти такое значение. Итак, сгенерируйте значение по умолчанию:Optional.of('0')
char digit = Stream.of('a', 'b', 'c')
.filter(e -> Character.isDigit(e))
.findFirst()
.or(() -> Optional.of('0')).get();
System.out.println(digit); //0
orElseGet() в Java8
в Яве 8Optional.orElseGet()
Методы также имеют ту же функцию. Следующий код фильтрует массив ['a', 'b', 'c'], isDigit судит, есть ли в массиве числовые символы, очевидно, что нет, поэтому findFirst не может найти такое значение. Итак, получите значение по умолчанию через orElseGet:'0'
char result = Stream.of('a', 'b', 'c')
.filter(c -> Character.isDigit(c))
.findFirst()
.orElseGet(()->'0');
System.out.println(result); //0
3. Необязательный.stream() из Java9
В таком случаеOptional.stream()
Метод возвращает максимальный поток содержит только один элемент потока. Если значение не существует, то верните нужный поток:
OptionalInt opt1 = IntStream.of(2, 5, 6).max(); //求最大值
OptionalInt opt2 = IntStream.of(1, 3, 7).max(); //求最大值
IntStream.concat(opt1.stream(), opt2.stream()) //将2个流合并
.forEach(System.out::println); //将合并后的流数据打印
Результат вывода консоли выглядит следующим образом:
6
7
Добро пожаловать, чтобы обратить внимание на мой блог, в нем много прекрасных коллекций
- Эта статья воспроизводится с указанием источника (должна быть ссылка, а не только текст):Блог Адетокунбо.
Если вы считаете это полезным, пожалуйста, поставьте лайк и поделитесь! Ваша поддержка - моя неиссякаемая творческая мотивация!. Кроме того, автор недавно выпустил следующий прекрасный контент, с нетерпением жду вашего внимания.