還java8感受很新嘛? java
看看jdk.java.net中已經jdk12啦,那還不趕快學,再不學真來不及了 相信你們的項目裏面有不少已經用了jdk8了,可是又有多少真正使用的java8的新特性呢? 本人一邊學習一邊總結,但願也能夠對正在學習java8的javaer有所幫助吧咱們先看一下一些代碼原來的寫法吧,相信你們會異常熟悉的git
public class Worker implements Runnable {
@Override
public void run() {
System.out.println("實現runnable接口,實現多線程");
}
}
//實現多線程
Worker worker = new Worker();
new Thread(worker).start();
複製代碼
public class LengthComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
}
String[] strings = new String[]{"tony", "a", "tom", "jack"};
Arrays.sort(strings, new LengthComparator());
複製代碼
上面量個例子都是將一個實現接口的類的對象傳遞給一個方法調用,由於在java8以前java是不支持將代碼塊作爲參數傳遞的github
仍是使用上面的兩個實例多線程
//java8
new Thread(() -> {
System.out.println("lambda實現多線程");
}).start();
//只有一行簡化{}
new Thread(() -> System.out.println("lambda實現多線程")).start();
複製代碼
//java8
Arrays.sort(strings, (first, second) -> {
return Integer.compare(first.length(), second.length());
});
//代碼中只有return語句,可簡化
Arrays.sort(strings, (first, second) -> Integer.compare(first.length(), second.length()));
//參數調用其類的相同方法,再簡化
Arrays.sort(strings, Comparator.comparingInt(String::length));
複製代碼
和原來的寫法比較,java8的寫法是否是又簡單又炫酷。下面簡單的說一說語法吧,當時我也理解一會呢。若是你的JavaScript(ES6)寫的很6,那麼理解起來真的是如數家珍。ide
public interface IOneMethods {
void method();
}
void testOneMethod(IOneMethods iOneMethods){
iOneMethods.method();
System.out.println("爲了使用lambda表達式");
}
//一個抽象方法的接口用lambda
new Test().testOneMethod(() -> System.out.println("使用lambda表達式實現接口"));
複製代碼
這邊咱們看到接口裏面只有一個抽象方法,若是有兩個或者是多個可不可使用lambda表達式呢,咱們新建一個試一下就知道了函數
public interface ITwoMethods {
void firstMethod();
void secondMethod(String methodName);
}
void testTwoMethod(ITwoMethods iTwoMethods){
System.out.println("爲了使用lambda表達式");
}
//兩個抽象方法的接口使用lambda
new Test().testTwoMethod(() -> System.out.println("使用lambda表達式實現接口"));
new Test().testTwoMethod((name) -> System.out.println(name));
複製代碼
對於只包含一個抽象方法的接口,你可使用lambda表達式來建立該接口的對象。這種接口被稱爲函數式接口。當你但願使用lambda表達式的時候,你必需要記住表達式的目的,併爲他指定一個函數式接口。學習
@FunctionalInterface
public interface IOneMethods {
void method();
}
複製代碼
上面咱們看到這樣一個符號 :: 實際上面這對對象方法的引用spa
//方法引用::
List<String> stringList = Arrays.asList(strings);
// List<Integer> stringLength = stringList.stream().map(string -> string.length()).collect(Collectors.toList());
List<Integer> stringLength = stringList.stream().map(String::length).collect(Collectors.toList());
複製代碼