se 类java_Java SE 9:可选的类改进

se 类java

发表简要目录: (Post Brief Table of Content:)

  • Introduction

    介绍
  • Java SE 8: Optional Class Basics

    Java SE 8:可选的类基础知识
  • Java SE 8: Optional Basic Example

    Java SE 8:可选基本示例
  • Java SE 9: Optional Class Improvements

    Java SE 9:可选的类改进
  • Java SE 9: Optional stream() Method

    Java SE 9:可选stream()方法
  • Java SE 8 Style: Optional Methods

    Java SE 8样式:可选方法
  • Java SE 9: Optional ifPresentOrElse() Method

    Java SE 9:可选的ifPresentOrElse()方法
  • Java SE 9: Optional or() Method

    Java SE 9:可选or()方法

介绍 (Introduction)

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错误,我们为每个对象执行空检查需要做多少工作。

Java SE 8:可选的类基础知识 (Java SE 8: Optional Class Basics)

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 Optional<T> extends 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对象不为空,则表示其中存在一个值。 如果为空,则不存在如下所示的值。

Java SE 8:可选基本示例 (Java SE 8: Optional Basic Example)

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 Optional<Integer> division(Integer i1,Integer i2)
  {
    if(i2 == 0) return Optional.empty();
    else {
       Integer i3 = i1/i2;
       return Optional.of(i3);
    }
  }

}

Outuput:-

输出:

Optional[2]
Optional.empty

Java SE 9:可选的类改进 (Java SE 9: Optional Class Improvements)

In Java SE 9, Oracle Corp has introduced the following three methods to improve Optional functionality.

在Java SE 9中,Oracle Corp引入了以下三种方法来改进Optional功能。

  • stream()

    流()
  • ifPresentOrElse()

    ifPresentOrElse()
  • or()

    要么()

We will pick up these methods one by one and discuss in-detail with some suitable examples in the coming sections.

我们将逐一介绍这些方法,并在接下来的部分中详细讨论一些合适的示例。

Java SE 9:可选stream()方法 (Java SE 9: Optional stream() Method)

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()”方法来延迟对可选对象的工作,如下所示:

Stream<Optional> emp = 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,以便我们可以在结果代码中懒惰地处理此结果。

Java SE 8样式:可选方法 (Java SE 8 Style: Optional Methods)

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类方法:

  • ifPresent()

    ifPresent()
void ifPresent(Consumer action)

If a value is present, performs the given action with the value, otherwise does nothing.

如果存在值,则使用该值执行给定的操作,否则不执行任何操作。

  • isPresent()

    存在()
  • boolean isPresent()

    If a value is present, returns true, otherwise false.

    如果存在值,则返回true,否则返回false。

  • orElse()

    要不然()
  • 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)
      {
        
        Optional<Integer> opt1 = division(4,2);    
        opt1.ifPresent( x -> System.out.println("Option1: Result found = " + x));
    
        Optional<Integer> 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<Integer> division(Integer i1,Integer i2)
      {
        if(i2 == 0) return Optional.empty();
        else {
           Integer i3 = i1/i2;
           return Optional.of(i3);
        }
      }
    
    }

    Outuput:-

    输出:

    Option1: Result found = 2
    Option2: Result not found, default vlaue = 0
    Option2: Result not found.

    Java SE 9:可选的ifPresentOrElse()方法 (Java SE 9: Optional ifPresentOrElse() Method)

    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<? super Tl> 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> Optional<Integer> opt1 = Optional.of(4)
    opt1 ==> Optional[4]
    
    jshell> opt1.ifPresentOrElse( x -> System.out.println("Result found: " + x), () -> System.out.println("Not Found."))
    Result found: 4
    
    jshell> Optional<Integer> opt2 = Optional.empty()
    opt2 ==> Optional.empty
    
    jshell> opt2.ifPresentOrElse( x -> System.out.println("Result found: " + x), () -> System.out.println("Not Found."))
    Not Found.

    Java SE 9:可选or()方法 (Java SE 9: Optional or() Method)

    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 Optional<T> or(Supplier<? extends Optional<? extends T>> 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> Optional<String> opStr = Optional.of("Rams")
    opStr ==> Optional[Rams]
    
    jshell> import java.util.function.*
    
    
    jshell> Supplier<Optional<String>> supStr = () -> Optional.of("No Name")
    supStr ==> $Lambda$67/222624801@23faf8f2
    
    
    jshell> 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> Optional<String> opStr = Optional.empty()
    opStr ==> Optional.empty
    
    jshell> Supplier<Optional<String>> supStr = () -> Optional.of("No Name")
    supStr ==> $Lambda$67/222624801@23faf8f2
    
    jshell> 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学习愉快!

    翻译自: https://www.journaldev.com/13108/javase9-optional-class-improvements

    se 类java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值