1、相比Java7,Java8的新特性
接口的默认方法
Java 8 容许给接口添加一个非抽象的方法实现,只须要使用default关键字便可,这个特征又叫作扩展方法。express
Lambda表达式编程
函数式接口数组
方法与构造函数引用并发
Java类库的新特性
Java 8 经过增长大量新类,扩展已有类的功能的方式来改善对并发编程、函数式编程、日期/时间相关操做以及其余更多方面的支持。编程语言
2、Lambda表达式
lambda是十分常见的编程语言结构,在函数式编程语言(例如Lisp、Haskell)中使用范围极广。ide
1.lambda表达式的定义
lambda表达式其实就是没有名称的函数,在Java中能够把它当成一个值。Java不容许脱离类的概念运行方法,因此lambda表达式是在某个类中定义的匿名方法(开发者可能不知道具体是哪一个类)。函数式编程
2.lambda表达式语法函数
一般以(argument) -> {body}这样的格式书写,argument是参数,body是表达式主体,其中参数类型能够指定,也能够省略,省略的话,编译器能够本身推断出来类型。.net
(arg1,arg2...) -> {body} //省略参数类型
(Type1 arg1,Type2 arg2...)->{body} //指定参数类型
参数能够是零个或多个,多个时在括号中,用逗号分隔线程
() -> {body} //零个参数时,用一个空的圆括号表示参数
(arg1) -> {body} 或者 arg1→{body} //一个参数
(arg1,arg2) -> {body} //多个参数
body表达式主体能够是零条或多条语句,包含在花括号中,body表达式主体只有一条语句时,花括号能够省略
3、函数式接口(FunctionalInterface)
函数式接口是Java 8为支持Lambda表达式新发明的。lambda表达式依托于函数接口。
它的定义:一个接口,若是只有一个显式声明的抽象方法,那么它就是一个函数接口。通常用@FunctionalInterface标注出来(也能够不标)。
@FunctionalInterface
public interface Lambda4Function {
public int add(int x ,int y);
}
4、Lambda4Function接口的使用
public class Lambda4FunctionInterfaceTest {
public static void main(String[] args){
//new一个匿名类对象
Lambda4Function lf1 = new Lambda4Function(){
public int add(int x,int y ){
return x+y;
}
};
int sum1 = lf1.add(3,4);
System.out.println("旧方式求3+4="+sum1);
//lambda表达式方式,指定参数类型
Lambda4Function lf2 = (int x,int y)->{return x+y;};
int sum2 = lf2.add(5,6);
System.out.println("lambda方式,指定参数类型,求5+6="+sum2);
//lambda表达式方式,不指定参数类型
Lambda4Function lf3 = (x, y)->{return x+y;};
int sum3 = lf3.add(7,8);
System.out.println("lambda方式,不指定参数类型,求7+8="+sum3);
}
}
5、Runnable和Comparator接口的使用
1.Runnale接口,,新建线程
public class Lambda4Runnable {
public static void main(String[] args){
Runnable oldRunnable = new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": Old Runnable");
}
};
Runnable newRunnable = () -> {
System.out.println(Thread.currentThread().getName() + ": New Lambda Runnable");
};
new Thread(oldRunnable).start();
new Thread(newRunnable).start();
}
}
2.Comparator接口,String数组排序
public class LambdaStudy {
public static void main(String[] args){
String[] oldWay = "Improving code with Lambda expressions in Java 8".split(" ");
//旧方式实现
Arrays.sort(oldWay, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.toLowerCase().compareTo(s2.toLowerCase());
}
});
System.out.println(String.join(",",oldWay));
//lambda表达式实现 String[] newWay = "Improving code with Lambda expressions in Java 8".split(" "); Arrays.sort(newWay,(s1, s2) -> { return s1.toLowerCase().compareTo(s2.toLowerCase()); }); System.out.println(String.join(",",newWay)); } } 6、lambda表达式与集合类 public class Lambda4List { public static void main(String[] args){ List<String> ls = new ArrayList<String>(); ls.add("到餐"); ls.add("外卖"); ls.add("猫眼"); //旧的方式遍历 for(String st: ls){ System.out.println(st); } System.out.println("---------分隔符---------"); //lambda方式 ls.forEach(s -> {System.out.println(s);}); } }