English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تم إدخال فئة Optional في Java 8، وقد ساعد إدخال فئة Optional في حل مشكلة استثناء النقطة الفارغة بشكل جيد. في Java 9، تم إضافة ثلاثة طرق لتحسين وظائفها:
stream()
ifPresentOrElse()
أو()
النحو
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]
النحو
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 غير موجودة.
النحو
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)); } }
النتيجة الخارجة للتنفيذ هي:
القيمة: البحر القيمة: غير موجودة