这是我参与更文挑战的第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