Java在jdk8中引入了新的Optional类。它是一个公共的最终类, 用于处理Java应用程序中的NullPointerException。你必须导入java.util包才能使用此类。它提供了用于检查特定变量的值是否存在的方法。
Java可选的类方法
方法 | 描述 |
---|---|
公共静态< T> 可选< T> empty() | 它返回一个空的Optional对象。此可选的值不存在。 |
(T值)的公共静态< T> 可选< T> | 它返回带有指定的当前非空值的Optional。 |
Nullable(T值)的公共静态< T> 可选< T> | 如果非null, 则返回描述指定值的Optional, 否则返回空的Optional。 |
public T get() | 如果此Optional中存在一个值, 则返回该值, 否则抛出NoSuchElementException。 |
public boolean isPresent() | 如果存在值, 则返回true, 否则返回false。 |
公共无效ifPresent(Consumer < ?super T> 消费者) | 如果存在值, 请使用该值调用指定的使用者, 否则不执行任何操作。 |
public Optional < T> 过滤器(谓词< ?super T> 谓词) | 如果存在值, 并且该值与给定谓词匹配, 则返回描述该值的Optional, 否则返回一个空的Optional。 |
public < U> 可选< U> 映射(功能< ?超级T , ?扩展了U> 映射器) | 如果存在值, 则将提供的映射函数应用于该值, 如果结果为非null, 则返回描述结果的Optional。否则, 返回一个空的Optional。 |
public < U> 可选< U> flatMap(函数< ?super T, 可选< U> 映射器) | 如果存在一个值, 则对它应用提供的带有可选参数的映射函数, 返回该结果, 否则返回一个空的Optional。 |
public T orElse(T other) | 如果存在, 则返回该值, 否则返回other。 |
公共T orElseGet(供应商< ?扩展T> 其他) | 如果存在该值, 则返回该值;否则调用其他值, 并返回该调用的结果。 |
公共< X扩展Throwable> T orElseThrow(Supplier < ?扩展X> exceptionSupplier)抛出X扩展Throwable | 它返回包含的值(如果存在), 否则抛出异常, 由提供的供应商创建。 |
public boolean equals(Object obj) | 指示其他某个对象是否“等于”此Optional。如果满足以下条件, 则认为另一个对象相等:它也是可选的;并且两个实例都不存在值;或者当前值通过equals()彼此“相等”。 |
public int hashCode() | 它返回当前值的哈希码值(如果有), 如果没有值, 则返回0(零)。 |
public String toString() | 它返回此Optional的非空字符串表示形式, 适用于调试。确切的表示格式未指定, 在实现和版本之间可能会有所不同。 |
在下面的示例中, 我们没有使用Optional类。该程序异常终止并抛出nullPointerException。
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
String lowercaseString = str[5].toLowerCase();
System.out.print(lowercaseString);
}
}
输出:
Exception in thread "main" java.lang.NullPointerException
at lambdaExample.OptionalExample.main(OptionalExample.java:6)
为了避免异常终止, 我们使用Optional类。在下面的示例中, 我们使用Optional。因此, 我们的程序可以执行而不会崩溃。
Java可选示例:如果不存在Value
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
Optional<
String>
checkNull = Optional.ofNullable(str[5]);
if(checkNull.isPresent()){ // check for value is present or not
String lowercaseString = str[5].toLowerCase();
System.out.print(lowercaseString);
}else
System.out.println("string value is not present");
}
}
【Java可选类】输出:
string value is not present
Java可选示例:如果存在值
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
str[5] = "JAVA OPTIONAL CLASS EXAMPLE";
// Setting value for 5th index
Optional<
String>
checkNull = Optional.ofNullable(str[5]);
if(checkNull.isPresent()){ // It Checks, value is present or not
String lowercaseString = str[5].toLowerCase();
System.out.print(lowercaseString);
}else
System.out.println("String value is not present");
}
}
输出:
java optional class example
另一个Java可选示例
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
str[5] = "JAVA OPTIONAL CLASS EXAMPLE";
// Setting value for 5th index
Optional<
String>
checkNull = Optional.ofNullable(str[5]);
checkNull.ifPresent(System.out::println);
// printing value by using method reference
System.out.println(checkNull.get());
// printing value by using get method
System.out.println(str[5].toLowerCase());
}
}
输出:
JAVA OPTIONAL CLASS EXAMPLE
JAVA OPTIONAL CLASS EXAMPLE
java optional class example
Java可选方法示例
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String[] str = new String[10];
str[5] = "JAVA OPTIONAL CLASS EXAMPLE";
// Setting value for 5th index
// It returns an empty instance of Optional class
Optional<
String>
empty = Optional.empty();
System.out.println(empty);
// It returns a non-empty Optional
Optional<
String>
value = http://www.srcmini.com/Optional.of(str[5]);
// If value is present, it returns an Optional otherwise returns an empty Optional
System.out.println("Filtered value: "+value.filter((s)->
s.equals("Abc")));
System.out.println("Filtered value: "+value.filter((s)->
s.equals("JAVA OPTIONAL CLASS EXAMPLE")));
// It returns value of an Optional. if value is not present, it throws an NoSuchElementException
System.out.println("Getting value: "+value.get());
// It returns hashCode of the value
System.out.println("Getting hashCode: "+value.hashCode());
// It returns true if value is present, otherwise false
System.out.println("Is value present: "+value.isPresent());
// It returns non-empty Optional if value is present, otherwise returns an empty Optional
System.out.println("Nullable Optional: "+Optional.ofNullable(str[5]));
// It returns value if available, otherwise returns specified value, System.out.println("orElse: "+value.orElse("Value is not present"));
System.out.println("orElse: "+empty.orElse("Value is not present"));
value.ifPresent(System.out::println);
// printing value by using method reference
}
}
输出:
Optional.empty
Filtered value: Optional.empty
Filtered value: Optional[JAVA OPTIONAL CLASS EXAMPLE]
Getting value: JAVA OPTIONAL CLASS EXAMPLE
Getting hashCode: -619947648
Is value present: true
Nullable Optional: Optional[JAVA OPTIONAL CLASS EXAMPLE]
orElse: JAVA OPTIONAL CLASS EXAMPLE
orElse: Value is not present
JAVA OPTIONAL CLASS EXAMPLE
推荐阅读
- Java并行数组排序
- Java方法引用
- Java 8 JDBC改进
- Java 8方法参数映射
- Android Fingerprint系列之google原生界面
- Android6.0------权限申请~easypermissions
- Android Runtime.getRuntime().exec
- Android App压力测试之Monkey
- App性能优化之内存优化