本文共 8856 字,大约阅读时间需要 29 分钟。
se 类java
In this post, we are going to discuss about “How Java SE 8’s Optional class solves null check problem?” and also “Java SE 9’s Optional class improvements”.
在本文中,我们将讨论“ Java SE 8的Optional类如何解决空检查问题?”。 以及“ Java SE 9的可选类改进”。
As a Java Developer, we know how much work we used to do for null checks for each and every object to avoid NullPointerException errors.
作为Java开发人员,我们知道为了避免NullPointerException错误,我们为每个对象执行空检查需要做多少工作。
Oracle Corp has introduced Optional class as part of “java.util” package. It is a container object which may or may not contain a non-null value.
Oracle Corp已将Optional类作为“ java.util”包的一部分引入。 它是一个容器对象,可能包含也可能不包含非null值。
It is mainly used to avoid lot of null checks and NullPointerException issues. Even though is part of java.util package, but it does NOT implement any Collection API interfaces. It extends Object class as shown below.
它主要用于避免大量的空检查和NullPointerException问题。 尽管它是java.util包的一部分,但它没有实现任何Collection API接口。 它扩展了Object类,如下所示。
public final class Optionalextends Object
It is final class and we cannot override it. If Optional object is NOT empty, that means a value is present in it. If it is empty, then a value is absent as shown below.
这是最后一堂课,我们不能覆盖它。 如果Optional对象不为空,则表示其中存在一个值。 如果为空,则不存在如下所示的值。
In this section, we will explore on how to use Java SE 8 Optional object to avoid null checks and NullPointerExceptions.
在本节中,我们将探讨如何使用Java SE 8 Optional对象来避免null检查和NullPointerExceptions。
Example:-
It is simple and basic example on Optional class. It demonstrates how to create an empty Optional object using Optional.empty() and how to create non-empty Optional object.例:-
这是Optional类的简单基础示例。 它演示了如何使用Optional.empty()创建空的Optional对象,以及如何创建非空的Optional对象。import java.util.Optional;public class JavaSE8OptionalDemo{ public static void main(String[] args) { System.out.println(division(4,2)); System.out.println(division(4,0)); } public static Optionaldivision(Integer i1,Integer i2) { if(i2 == 0) return Optional.empty(); else { Integer i3 = i1/i2; return Optional.of(i3); } }}
Outuput:-
输出:
Optional[2]Optional.empty
In Java SE 9, Oracle Corp has introduced the following three methods to improve Optional functionality.
在Java SE 9中,Oracle Corp引入了以下三种方法来改进Optional功能。
We will pick up these methods one by one and discuss in-detail with some suitable examples in the coming sections.
我们将逐一介绍这些方法,并在接下来的部分中详细讨论一些合适的示例。
If a value present in the given Optional object, this stream() method returns a sequential Stream with that value. Otherwise, it returns an Empty Stream.
如果给定的Optional对象中存在一个值,则此stream()方法将返回一个具有该值的顺序Stream。 否则,它将返回一个空流。
They have added “stream()” method to work on Optional objects lazily as shown below:
他们添加了“ stream()”方法来延迟对可选对象的工作,如下所示:
Streamemp = getEmployee(id)Stream empStream = emp.flatMap(Optional::stream)
Here Optional.stream() method is used convert a Stream of Optional of Employee object into a Stream of Employee so that we can work on this result lazily in the result code.
这里使用Optional.stream()方法将Employee的Optional对象的Stream转换为Employee的Stream,以便我们可以在结果代码中懒惰地处理此结果。
In Java SE 8, we should use ifPresent(), isPresent(), orElse() etc. methods to check an Optional object and perform some functionality on it. It’s bit tedious process to perform this. However, Java SE 9 has introduced a new method to overcome this problem.
在Java SE 8中,我们应该使用ifPresent(),isPresent()或Else()等方法来检查Optional对象并对其执行一些功能。 执行此过程比较繁琐。 但是,Java SE 9引入了一种新方法来克服此问题。
Let us explore Java SE 8 style in this section. We will explore that new method in next section.
让我们在本节中探讨Java SE 8样式。 我们将在下一部分中探索该新方法。
Here we are going to explore the following three Optional class methods:
在这里,我们将探索以下三个Optional类方法:
void ifPresent(Consumer action)
If a value is present, performs the given action with the value, otherwise does nothing.
如果存在值,则使用该值执行给定的操作,否则不执行任何操作。
boolean isPresent()
If a value is present, returns true, otherwise false.
如果存在值,则返回true,否则返回false。
public T orElse(T other)
If a value is present, returns the value, otherwise returns other.
如果存在值,则返回该值,否则返回other。
Example:-
例:-
import java.util.Optional;public class JavaSE8OptionalDemo{ public static void main(String[] args) { Optionalopt1 = division(4,2); opt1.ifPresent( x -> System.out.println("Option1: Result found = " + x)); Optional opt2 = division(4,0); opt2.ifPresent( x -> System.out.println("Option2: Result found: " + x)); System.out.println("Option2: Result not found, default vlaue = " + opt2.orElse(new Integer(0))); if(opt2.isPresent()) System.out.println("Option2: Result found."); else System.out.println("Option2: Result not found."); } public static Optional division(Integer i1,Integer i2) { if(i2 == 0) return Optional.empty(); else { Integer i3 = i1/i2; return Optional.of(i3); } }}
Outuput:-
输出:
Option1: Result found = 2Option2: Result not found, default vlaue = 0Option2: Result not found.
In section, we explore same kind of scenarios by using Java SE 9’s Optional ifPresentOrElse() Method. It combines all those methods like ifPresent(), isPresent() and orElse() methods in a nice way.
在本节中,我们将通过使用Java SE 9的Optional ifPresentOrElse()方法来探索相同类型的场景。 它以一种很好的方式结合了所有这些方法,例如ifPresent(),isPresent()和orElse()方法。
Java SE 9 Optional ifPresentOrElse() API:-
Java SE 9可选的ifPresentOrElse()API:-
public void ifPresentOrElse(Consumerl action, Runnable emptyAction)
If a value is present, performs the given action with the value, otherwise performs the given empty-based action.
如果存在值,则使用该值执行给定的操作,否则执行给定的基于空的操作。
ifPresentOrElse() Example:-
ifPresentOrElse()示例:-
jshell> Optionalopt1 = Optional.of(4)opt1 ==> Optional[4]jshell> opt1.ifPresentOrElse( x -> System.out.println("Result found: " + x), () -> System.out.println("Not Found."))Result found: 4jshell> Optional opt2 = Optional.empty()opt2 ==> Optional.emptyjshell> opt2.ifPresentOrElse( x -> System.out.println("Result found: " + x), () -> System.out.println("Not Found."))Not Found.
In Java SE 9 Optional API, or() method is used to return a value, if Optional contains a value. Otherwise returns a value specified in the Supplier. This or() method takes a Supplier as an argument to specify a default value
在Java SE 9中,如果Optional包含值,则使用or()方法返回值。 否则,返回供应商中指定的值。 此or()方法将Supplier作为参数指定默认值
Java SE 9 Optional or() API:-
Java SE 9可选or()API:-
public Optionalor(Supplier > supplier)
Let us see an example with a value present in Optional first.
让我们来看一个示例,该示例首先在Optional中存在一个值。
Java SE 9 Optional or() Example-1:-
Java SE 9可选or()示例1:-
jshell> OptionalopStr = Optional.of("Rams")opStr ==> Optional[Rams]jshell> import java.util.function.*jshell> Supplier > supStr = () -> Optional.of("No Name")supStr ==> $Lambda$67/222624801@23faf8f2jshell> opStr.or(supStr)$5 ==> Optional[Rams]
Let us see an example with a value not-present in Optional now.
Java SE 9 Optional or() Example-2:-现在让我们来看一个示例,该示例的值在Optional中不存在。
Java SE 9可选or()示例2:-jshell> OptionalopStr = Optional.empty()opStr ==> Optional.emptyjshell> Supplier > supStr = () -> Optional.of("No Name")supStr ==> $Lambda$67/222624801@23faf8f2jshell> opStr.or(supStr)$7 ==> Optional[No Name]
That’s it all about “Java SE 9: Optional Class Improvements” new feature. We will discuss some more Java SE 9 New Features in my coming posts.
这就是“ Java SE 9:可选类的改进”新功能的全部内容。 我们将在以后的文章中讨论更多Java SE 9新功能。
Please drop me a comment if you like my post or have any issues/suggestions/type errors.
如果您喜欢我的帖子或有任何问题/建议/类型错误,请给我评论。
Thank you for reading my tutorials.
感谢您阅读我的教程。
Happy Java SE 9 Learning!
Java SE 9学习愉快!
翻译自:
se 类java
转载地址:http://pqlzd.baihongyu.com/