java 8一些好用的特性

这是我参与更文挑战的第17天,活动详情查看: 更文挑战

前言

java 8 (又称jdk1.8)是java编程中很重要的一个版本,它在2014年3月18日发布,包含多种新的API。

一、Optional 类

应该每个人在代码编程过程中都遇到过“空指针”吧,我不信没有人遇到过。

java 8引入一种新的容器可以很好的解决空指针的问题,那就是Optional 类。

Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。

 // Optional.ofNullable - 允许传递为 null 参数      
Optional<Integer> a = Optional.ofNullable(value1);
复制代码

有了这句,再也不怕传值是null啦,即使null,也能接住。

 // Optional.orElse - 允许传递为 null 参数,如果传的是null,就返回0L。      
Optional<Integer> a = Optional.ofNullable(value1).orElse(0L);
复制代码
// Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException      
Optional<Integer> b = Optional.of(value2);
复制代码
二、java 8排序

和java 7的排序作对比,语法简介了不少。

  // 使用 java 7 排序  
private void sortUsingJava7(List<String> names){         
Collections.sort(names, new Comparator<String>() {         
        @Override         
	public int compare(String s1, String s2) {            
            return s1-s2;        
	}      
    });   
}      
复制代码
// 使用 java 8 排序   
private void sortUsingJava8(List<String> names){      
	Collections.sort(names, (s1, s2) -> s1.compareTo(s2));   
    } 
}
复制代码
三、Lambda 表达式

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

两大特点:语法简化、实现简单接口。

语法格式:

(parameters) -> expression

(parameters) ->{ statements; }

语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。

遍历集合

lambda表达式可以使集合遍历操作代码更简洁,下列所示为 forEach方法遍历集合。

   ArrayList<Integer> list = new ArrayList<>();       
   Collections.addAll(list, 1,2,3,4,5);       //lambda表达式 方法引用
   list.forEach(System.out::println);       
   list.forEach(element -> {        
       if (element % 2 == 0) {          
           System.out.println(element);       
   	}     
   });
复制代码

接口实现

使用Lambda 表达式还能对接口做简单的实现。

public class Test1 {    
public static void main(String[] args) {         
    //无参无返回       
    NoReturnNoParam noReturnNoParam = () -> {            
        System.out.println("NoReturnNoParam");        
};        
    noReturnNoParam.method();         
    //一个参数无返回        
    NoReturnOneParam noReturnOneParam = (int a) -> { 
        System.out.println("NoReturnOneParam param:" + a);        
};        
    noReturnOneParam.method(6);         
    //多个参数无返回        
    NoReturnMultiParam noReturnMultiParam = (int a, int b) -> { 
        System.out.println("NoReturnMultiParam param:" + "{" + a +"," + + b +"}"); 
};        
    noReturnMultiParam.method(6, 8);
}
复制代码
@FunctionalInterface 
public interface NoReturnMultiParam {    
    void method(int a, int b); 
} 
/**无参无返回值*/ 
@FunctionalInterface 
public interface NoReturnNoParam {    
    void method(); 
} 
/**一个参数无返回*/ 
@FunctionalInterface 
public interface NoReturnOneParam {    
    void method(int a); 
} 
/**多个参数有返回值*/ 
@FunctionalInterface 
public interface ReturnMultiParam {    
    int method(int a, int b); 
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享