目錄
簡單記錄一下java8有哪些新特性,這個是去年年末到短信子彈頭面試的時候被問到過的,當時不會回答,這也算是一個考點。
java8引入了哪些新特性
1.Lamada表達式
2.接口默認方法和靜態方法
3.引入了流Stream
4.可以重複註解
5.對方法的引用使用了::
6.支持並行(parallel)數組
7.使用Base64
1.Lamada表達式
lamada表達式用於替代匿名類的使用,這種匿名類一定要是那種實現接口對接口方法重新,這種接口只有一個方法的這種,這種接口也被稱爲函數接口,一般用()->{} 來代替匿名內部類。
public class LamadaStudy {
@Test
public void testLamada(){
//普通寫法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("普通寫法-------開啓java8新特性的學習");
}
}).start();
//lamada寫法,帶有打括號的
new Thread(()->{
System.out.println("lamada寫法-------開啓java8新特性的學習");
}).start();
//不帶多括號的
new Thread(()->
System.out.println("去掉打括號-------開啓java8新特性的學習") //打括號只有一行代碼的時候去掉大括號
).start();
//帶有返回值的普通寫法
Integer[] intArr = {2,5,3,1,6,4,8};
List<Integer> list = Arrays.asList(intArr);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
System.out.println("帶有返回值的普通寫法---------"+list.toString());
//帶扣返回值的lamada寫法
Collections.sort(list,(int1,int2)->{return int1-int2;});
System.out.println("帶帶扣返回值的lamada寫法---------"+list.toString());
//自己寫一個函數接口 普通寫法
String meassage = LamadaStudy.goodgoodStudy("今天星期日,加油",new ISundayStudy(){
@Override
public String lamadaStudy(String message){
return message;
}
});
System.out.println("字節手寫普通的函數接口--------"+meassage);
//lamada寫法
String messageTwo = LamadaStudy.goodgoodStudy("今天將java8的新特性學完",(message)->{
return "加油"+message;
});
System.out.println("字節手寫lamada表達式接口--------"+messageTwo);
}
}
@FunctionalInterface
interface ISundayStudy{
String lamadaStudy(String message);
}
2.接口默認方法和靜態方法
interface IDefaultFunction{
default void study(){
System.out.println("什麼時候能找到工作");
}
static void finJob(){
System.out.println("開始找工作");
}
}
class DefaultFunction implements IDefaultFunction{
}
Java 8用默認方法與靜態方法這兩個新概念來擴展接口的聲明。默認方法與抽象方法不同之處在於抽象方法必須要求實現,但是默認方法則沒有這個要求,就是接口可以有實現方法,而且不需要實現類去實現其方法。我們只需在方法名前面加個default關鍵字即可實現默認方法。爲什麼要有這個特性?以前當需要修改接口的時候,需要修改全部實現該接口的類。而引進的默認方法的目的是爲了解決接口的修改與現有的實現不兼容的問題。
3.引入了流Stream
Stream可以鏈式書寫代碼,需要幾行搞定的代碼,Stream可以一行搞定,Stream是使用內部迭代,而且Stream支持並行操作
@Test
public void streamTest(){
List<Integer>list = new ArrayList<>();
list.add(2);
list.add(4);
list.add(5);
list.forEach(integer -> {
System.out.println(integer);
});
System.out.println("=======分割線=========");
List<Integer> list2 = list.stream().filter((i)-> i>2).collect(Collectors.toList());
list2.forEach(i-> System.out.println(i));
}
輸出
2
4
5
=======分割線=========
4
5
filter:接受lamada表達式,從中截取一符合條件的元素
limit:截流limit(5),表示截取五個元素
skip(n):跳過元素,返回一個扔掉了前n個元素的流,若流中元素不足n個,則返回一個空流,與limit(n)互補
distinct:篩選,通過流所生成元素的hashCode()和equals()去除重複元素
map--接收Lambda,將元素轉換成其他形式或提取信息
4.可以重複註解
@Repeatable註解
5.集合引入了很多parallel開頭的並行操作的方法
特別是parallelSort,這個將排序拆分很多小的集合,運用多線程進行排序,最後合併,得到最終想要的結果。
參考文:
https://www.cnblogs.com/wuhenzhidu/p/10740091.html
https://blog.csdn.net/javazyw/article/details/82733459
https://blog.csdn.net/ZytheMoon/article/details/89715618
今天星期日在宿舍坐了一天,只有喫飯的時候纔出去了一下,雖然現在週末和工作日對我來說沒區別,但是對我以前是有區別的,想想當初有工作的時候,週末是怎麼過的,現在的週末是怎麼過的,當初工作也不是很忙,週末大把的時間,當極少拿來學習的,我想到了其中有很大一部分程序員他們平時週末就應該像我這樣過的,我現在只是在追趕他們罷了,不是本來就知道的少,而是平時沒有花時間去學,其實一個小的知識點花一天時間來學習就已經足夠了,但是浪費了太多的光陰。
只能告訴自己:悟以往之不諫 知來者之可追