java8简单了解
今天熟悉了一下java8的简单写法,相对java7提供了更多简便的写法,抛去性能方面不说,确实能够减少代码的行数,函数式编程让编程变得更加优雅。学习更多的是参考了其他的教程,以下也仅仅是做了一个学习笔记。
特点
-
Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。
-
方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
-
默认方法 − 默认方法就是一个在接口里面有了一个实现的方法
-
Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中
-
Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
-
Date Time API − 加强对日期与时间的处理。
-
当然还有其他跟多的特点,没有接触也没做更多了解
代码演示
public class LambdaStudy {
public static void main(String[] args) {
LambdaStudy lambdaStudy = new LambdaStudy();
// 类型声明
MathOpertion operation = (int a,int b) -> a+b;
//不用类型声明
MathOpertion subtraction = (a,b) -> a-b;
//大括号中的返回语句
MathOpertion multiplication = (int a,int b) -> {return a*b; };
// 没有大括号及返回语句
MathOpertion division = (int a, int b) -> a/b;
System.out.println("10 + 5 = " + lambdaStudy.operate(10,5,operation));
System.out.println("10 - 5 = " + lambdaStudy.operate(10, 5, subtraction));
System.out.println("10 x 5 = " + lambdaStudy.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + lambdaStudy.operate(10, 5, division));
// 不用括号
GreetingService greetingService = message ->
System.out.println("Hello" + message);
// 用括号
GreetingService greetingService1 = (message) -> {
System.out.println("Hello" + message);
};
greetingService.sayHell("Runoob");
greetingService1.sayHell("Google");
String[] players = {"Rafael Nadal", "Novak Djokovic",
"Stanislas Wawrinka", "David Ferrer",
"Roger Federer", "Andy Murray",
"Tomas Berdych", "Juan Martin Del Potro",
"Richard Gasquet", "John Isner"};
Comparator<String> comparator = (String s1, String s2) -> (s1.compareTo(s2));
Arrays.sort(players,comparator);
List names = new ArrayList();
names.add("Google");
names.add("Runoob");
names.add("Taobao");
names.add("Baidu");
names.add("Sina");
// 方法引用
names.forEach(System.out::println);
//
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Predicate<Integer> predicate = n -> true
// n 是一个参数传递到 Predicate 接口的 test 方法
// n 如果存在则 test 方法返回 true
System.out.println("输出所有数据:");
eval(list, n->true);
System.out.println("输出所有偶数:");
eval(list,n -> n%2 == 0);
}
public static void eval(List<Integer> list,Predicate<Integer> predicate){
list.stream().filter(predicate).forEach(System.out::println);
}
interface MathOpertion{
int operation(int a,int b);
}
interface GreetingService{
void sayHell(String message);
}
private int operate(int a,int b,MathOpertion mathOpertion){
return mathOpertion.operation(a,b);
}}
Optional类
/**
* @author luoc
* @date 2018/11/27 0027
* @Time 15:08
*/
public class OptionalStudy {
public static void main(String[] args) {
OptionalStudy optionalStudy = new OptionalStudy();
Integer values1 = null;
Integer values2 = new Integer(10);
// Optional.ofNullable - 允许传递为null参数
Optional<Integer> a = Optional.ofNullable(values1);
//Optioanl.of - 如果传递的参数是null 抛出异常 nullEx
Optional<Integer> b = Optional.of(values2);
System.out.println(optionalStudy.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b){
// Optional.isPresent - 判断值是否存在
System.out.println(a.isPresent());
System.out.println(b.isPresent());
// Optional.orElse - 如果值存在,返回它,否则返回默认值
Integer value1 = a.orElse(new Integer(0));
Integer values2 = b.get();
return value1 + values2;
}}