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

تعليمات Java الأساسية

تحكم في العملية Java

مجموعات Java Array

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

معالجة الاستثنائات Java

قوائم Java List

Java Queue (الطابور)

مجموعات Java Map

مجموعات Java Set

إدخال/خروج Java (I/O)

قراء/كتابة Java

مواضيع أخرى في Java

فئة Optional المعدلة في Java 9

ميزات Java 9 الجديدة

تم إدخال فئة Optional في Java 8، وقد ساعد إدخال فئة Optional في حل مشكلة استثناء النقطة الفارغة بشكل جيد. في Java 9، تم إضافة ثلاثة طرق لتحسين وظائفها:

  • stream()

  • ifPresentOrElse()

  • أو()

طريقة stream()

النحو

public Stream<T> stream()

يستخدم هدف التدفق لتحويل Optional إلى تدفق، إذا كان يحتوي Optional على قيمة، فإنه يعيد تدفق يحتوي على هذه القيمة، وإلا يعيد تدفق فارغ (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"));
 
      //تصفية القائمة بناءً على الطباعة للقيم غير الفارغة
  
      //إذا كان التحقق الخياري غير فارغ، استخرج القيمة في التدفق، وإلا أعد التدفق الفارغ
      List<String> filteredList = list.stream()
         .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
         .collect(Collectors.toList());
 
      //طريقة التدفق الخيارية ستقوم بتقديم تدفق من واحد 
      //إذا كانت البيانات موجودة أو لا، يتم العودة إلى صفر عنصر.
      List<String> filteredListJava9 = list.stream()
         .flatMap(Optional::stream)
         .collect(Collectors.toList());
 
      System.out.println(filteredList);
      System.out.println(filteredListJava9);
   }  
}

النتيجة الخارجة للتنفيذ هي:

[A, B]
[A, B]

طريقة ifPresentOrElse()

النحو

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

تحسين طريقة ifPresentOrElse هو وجود else، الذي يأخذ معاملين Consumer وRunnable.

يستخدم طريقة ifPresentOrElse لتحديد أن إذا كان Optional يحتوي على قيمة، يتم استدعاء الدالة action التي تحتوي على القيمة، أي action.accept(value)، مما يوافق مع ifPresent؛ الفرق بينه وبين طريقة ifPresent هو أن ifPresentOrElse يحتوي على معامل ثاني emptyAction - إذا لم يحتوي Optional على قيمة، فإن ifPresentOrElse سيقوم بدور emptyAction، أي emptyAction.run().

مثال على الإنترنت

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("القيمة: " + x),() -> 
         System.out.println("غير موجودة."));
 
      optional = Optional.empty();
 
      optional.ifPresentOrElse( x -> System.out.println("القيمة: " + x),() -> 
         System.out.println("غير موجودة."));
   }  
}

النتيجة الخارجة للتنفيذ هي:

القيمة: 1
غير موجودة.

طريقة or()

النحو

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

إذا كانت القيمة موجودة، يتم العودة إلى القيمة المحددة من قبل Optional، وإلا يتم العودة إلى قيمة مسبقة.

import java.util.Optional;
import java.util.function.Supplier;
 
public class Tester {
   public static void main(String[] args) {
      Optional<String> optional1 = Optional.of("البحر");
      Supplier<Optional<String>> supplierString = () -> Optional.of("غير موجودة");
      optional1 = optional1.or(supplierString);
      optional1.ifPresent(x -> System.out.println("القيمة: " + x));
      optional1 = Optional.empty();    
      optional1 = optional1.or(supplierString);
      optional1.ifPresent(x -> System.out.println("القيمة: " + x));  
   }  
}

النتيجة الخارجة للتنفيذ هي:

القيمة: البحر
القيمة: غير موجودة

ميزات Java 9 الجديدة