English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grund教程

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java Ausnahmebehandlung

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java 9 改进的 Optional 类

Java 9 Neue Funktionen

Optional 类在 Java 8 中引入,Optional 类的引入很好地解决空指针异常。。在 java 9 中, 添加了三个方法来改进它的功能:

  • stream()

  • ifPresentOrElse()

  • or()

stream() 方法

Syntax

public Stream<T> stream()

stream 方法的作用就是将 Optional 转为一个 Stream,如果该 Optional 中包含值,那么就返回包含这个值的 Stream,否则返回一个空的 Stream(Stream.empty())。

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class Tester {
public static void main(String[] args) {
   List<Optional<String>> list = Arrays.asList (
      Optional.empty(), 
      Optional.of("A"), 
      Optional.empty(), 
      Optional.of("B"));
 
      //filter the list based to print non-empty values
  
      //if optional is non-empty, get the value in stream, otherwise return empty
      List<String> filteredList = list.stream()
         .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
         .collect(Collectors.toList());
 
      //Optional::stream Methode wird einen Stream von entweder einem oder keinem Element zurückgeben 
      //oder null, wenn der Datenbestand vorhanden ist oder nicht.
      List<String> filteredListJava9 = list.stream()
         .flatMap(Optional::stream)
         .collect(Collectors.toList());
 
      System.out.println(filteredList);
      System.out.println(filteredListJava9);
   }  
}

Ausführungsergebnis:

[A, B]
[A, B]

ifPresentOrElse() Methode

Syntax

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

Die Verbesserung der Methode ifPresentOrElse ist die Verfügbarkeit von else, das zwei Parameter Consumer und Runnable annimmt.

Die Verwendung der Methode ifPresentOrElse ist so, dass, wenn ein Optional einen Wert enthält, die Funktion action auf den enthaltenen Wert aufgerufen wird, d.h. action.accept(value), was mit ifPresent übereinstimmt; der Unterschied zur Methode ifPresent besteht darin, dass ifPresentOrElse einen zweiten Parameter emptyAction hat - wenn der Optional keinen Wert enthält, ruft ifPresentOrElse emptyAction auf, d.h. emptyAction.run().

Online-Beispiel

import java.util.Optional;
 
public class Tester {
   public static void main(String[] args) {
      Optional<Integer> optional = Optional.of(1);
 
      optional.ifPresentOrElse( x -> System.out.println("Wert: " + x),() -> 
         System.out.println("Nicht vorhanden."));
 
      optional = Optional.empty();
 
      optional.ifPresentOrElse( x -> System.out.println("Wert: " + x),() -> 
         System.out.println("Nicht vorhanden."));
   }  
}

Ausführungsergebnis:

Wert: 1
Nicht vorhanden.

or() Methode

Syntax

public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

Wenn der Wert existiert, wird der von Optional angegebene Wert zurückgegeben, andernfalls wird ein vorgegebener Wert zurückgegeben.

import java.util.Optional;
import java.util.function.Supplier;
 
public class Tester {
   public static void main(String[] args) {
      Optional<String> optional1 = Optional.of("Meer");
      Supplier<Optional<String>> supplierString = () -> Optional.of("Nicht vorhanden");
      optional1 = optional1.or( supplierString);
      optional1.ifPresent( x -> System.out.println("Wert: " + x));
      optional1 = Optional.empty();    
      optional1 = optional1.or( supplierString);
      optional1.ifPresent( x -> System.out.println("Wert: " + x));  
   }  
}

Ausführungsergebnis:

Wert: Meer
Wert: Nicht vorhanden

Java 9 Neue Funktionen