当前位置: 移动技术网 > IT编程>开发语言>Java > 乐字节-Java8新特性之Optional

乐字节-Java8新特性之Optional

2019年04月13日  | 移动技术网IT编程  | 我要评论

 

上一篇小乐带大家了解了java新特性之stream,接下来将会继续述说java新特性之optional

 

optional<t>类(java.util.optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在optional可以更好的表达这个概念。并且可以避免空指针异常。

1、of

为非null的值创建一个optional,如果值为null,则会抛出nullpointerexception

optional<integer> optional = optional.of(13);
system.out.println(optional)

 

2、ofnullable

为指定的值创建一个optional,如果指定的值为null,则返回一个空的optional。

optional<string> optional2 = optional.ofnullable(null);
system.out.println(optional2);
optional2 = optional.ofnullable("aaa");
system.out.println(optional2);

 

3、ispresent

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

optional<string> optional2 = optional.ofnullable(null);
system.out.println(optional2);
system.out.println(optional2.ispresent());

optional2 = optional.ofnullable("aaa");
system.out.println(optional2);
system.out.println(optional2.ispresent());

4、get

如果optional有值则将其返回,否则抛出nosuchelementexception。

optional2 = optional.ofnullable("aaa");
system.out.println(optional2);
system.out.println(optional2.ispresent());
system.out.println(optional2.get());

5、ifpresent  

如果optional实例有值则为其调用consumer,否则不做处理 。隐士地其中进行了null判断。

public static void main(string[] args) {
   string str1 = "hello";
   string str2 = null;
   optional<string> optional1 = optional.ofnullable(str1);
   optional<string> optional2 = optional.ofnullable(str2);

   optional1.ifpresent(str->system.out.println(str.length()));
   optional2.ifpresent(str-> system.out.println(str.length()));
}

 

6、orelse

如果有值则将其返回,否则返回指定的其它值。

public static void main(string[] args) {
   string str1 = "hello";
   string str2 = null;
   optional<string> optional1 = optional.ofnullable(str1);
   optional<string> optional2 = optional.ofnullable(str2);
   system.out.println(optional1.orelse("默认字符串"));
   system.out.println(optional2.orelse("默认字符串"));
}

7、orelseget

orelseget与orelse方法类似,区别在于得到的默认值。orelse方法将传入的一个值作为默认值,orelseget方法可以接受supplier接口的实现用来生成默认值

public static void main(string[] args) {
   integer i = 20;
   optional<integer> op = optional.ofnullable(i);
   system.out.println(op.orelseget(()->0));
   system.out.println(optional.ofnullable(null).orelseget(()->0));
}

 

8、orelsethrow

如果有值则将其返回,否则抛出supplier接口创建的异常。

public static void main(string[] args) {
   // 自己指定异常
   system.out.println((optional.ofnullable("a").orelsethrow(()->new indexoutofboundsexception())));
   system.out.println((optional.ofnullable(null).orelsethrow(()->new indexoutofboundsexception())));
}

 

9、map

map处理有值的情况,如果有值,则对其执行调用map参数中的函数得到返回值,否则返回空optional。

public static void main(string[] args) {
  list<string> list = new arraylist<string>(){
      {
           add("aaa");
           add("bbb");
           add(null);
      }
  };

  list.stream().foreach(temp ->{
       optional<string> opt = optional.ofnullable(temp);
       system.out.println(opt.map(n -> {
          return n.touppercase();
      }).orelse("nothing"));
  });

  // 简写为如下形式
   list.stream().foreach(temp->{
       system.out.println(optional.ofnullable(temp).map(n->n.touppercase()).orelse("nothing"));
  });
}

 

10、flatmap

如果有值,为其执行mapping函数返回optional类型返回值,否则返回空optional。flatmap与map(funtion)方法类似,区别在于flatmap中的mapper返回值必须是optional。调用结束时,flatmap不会对结果用optional封装。 可以将内容

public static void main(string[] args) {
   optional<string> opt1 = optional.ofnullable("aaa");
   optional<string> opt2 = optional.ofnullable(null);
   system.out.println(opt1.flatmap(n->{
       return optional.ofnullable(n.touppercase());
  }).orelse("还会没有吗"));

   system.out.println( opt2.flatmap(n->{
       return optional.ofnullable(n.touppercase());
  }).orelse("还会没有吗"));
}

 

11、filter

如果有值并且满足断言条件返回包含该值的optional,否则返回空optional。

public static void main(string[] args) {
   optional<string> opt1 = optional.ofnullable("aabbbbaa");
   optional<string> opt2 = optional.ofnullable(null);

   system.out.println(opt1.filter(value->value.length()>6));
   system.out.println(opt2.filter(value->value.length()>6));
}

 

好了,java8新特性之optional就介绍到这里了,接下去小乐将会继续带大家了解java8新特性,请继续关注,转载请说明出处和作者。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网