·一.lambda表達(dá)式語(yǔ)法
語(yǔ)法一:無(wú)參數(shù),無(wú)返回值
()->System.out.println("你在哪");
語(yǔ)法二:有一個(gè)參數(shù),無(wú)返回值
(x)->System.out.println(x);
語(yǔ)法三:若有一個(gè)參數(shù),無(wú)返回值 可以不寫(xiě)小括號(hào)
x->System.out.println(x);
語(yǔ)法四:有兩個(gè)或多個(gè)參數(shù),有返回值,lambda體中有多條數(shù)據(jù)
Comparator<Integer> co = (x,y)->{
System.out.println("語(yǔ)法四");
return Integer.compare(x,y);
};
語(yǔ)法五:若lambda體中只有一條語(yǔ)句,return 和大括號(hào)可以不寫(xiě)
(x,y)->Integer.compare(x, y);
語(yǔ)法六:lambda表達(dá)式中的參數(shù)類(lèi)型可以不寫(xiě),編譯器會(huì)根據(jù)上下文推斷
·二.lambda表達(dá)式需要函數(shù)式接口的支持
函數(shù)式接口:接口中只有一個(gè)抽象方法的接口稱(chēng)為函數(shù)式接口。@FunctionalInterface可以使用判斷是否是函數(shù)式接口
·三.Java8內(nèi)置的四大核心函數(shù)式接口
Consumer<T>:消費(fèi)型接口
void accept(T t)
Supplier(T):供給型接口
T get();
Function<T,R>:函數(shù)型接口
R apply(T t);
Predicate<T>:斷言型接口
boolen test(T t)
·四:·4.1方法引用
主要有三種語(yǔ)法格式
1.對(duì)象::實(shí)例方法名
PrintStream ps1 = System.out;
2.類(lèi)::靜態(tài)方法名
Comparator<Integer> com = (x,y)->Integer.compare(x,y);
Comparator<Integer> cm = Integer::compare;
3.類(lèi)::實(shí)例方法名
BiPredicate <String,String> bp = (x,y)->x.equals(y);
BiPredicate <String,String> bp1 = String::equals;
注意:
1.lambda 體中調(diào)用方法的參數(shù)列表與返回值類(lèi)型,要與函數(shù)式接口中的抽象方法的函數(shù)列表和返回值類(lèi)型保持一致
2.若lambda 參數(shù)列表中的第一參數(shù)時(shí)實(shí)例方法的調(diào)用者,而第二個(gè)參數(shù)時(shí)實(shí)例方法的參數(shù)時(shí),可以使用ClassName::method
·4.2構(gòu)造器引用
格式:ClassName::new
注意:需要調(diào)用的構(gòu)造器參數(shù)列表要與函數(shù)式接口中的抽象方法的參數(shù)列表保持一致
·4.3數(shù)組引用
格式:Type[]::new
例如:
Function<Integer,String[]>fun = (x)->new String[x];
String[] str = fun.apply(10);
System.out.println(str.length);
Function<Integer,String[]>fun = String[]::new;
String[] str = fun.apply(20);
System.out.println(str.length);
·五:Stream的三個(gè)操作步驟:
1.創(chuàng)建Stream
1.1通過(guò)Collection系列集合提供的stream()或parallelStream()
List<String> list = new ArrayList<>();
Stream<String> stream1 = list.Stream();
1.2通過(guò)Arrays中的靜態(tài)方法stream()獲取數(shù)組流
Employee[] emps = new Employee[10];
Stream<Employee> stream2 = Arrays.stream(emps);
1.3通過(guò)Stream類(lèi)中的靜態(tài)方法of()
Stream<String> stream3 = String.of("aa","bb","cc");
1.4創(chuàng)建無(wú)限流
迭代
Stream<Integer> stream4 = Stream.iterate(0,(x)->x+2);
stream4.forEach(System.out::println);//無(wú)限生成
//生成
Stream.generate(()->Math.ramdom());
2.中間操作
2.1 篩選與切片
filter -- 接收l(shuí)ambda,從流中排除某些元素。
limit -- 截?cái)嗔鳎蛊湓夭怀^(guò)給定數(shù)量
skip(n)-- 跳過(guò)元素,返回一個(gè)扔掉了前n個(gè)元素的流,若流中元素不足n個(gè),則返回一個(gè)空流,與limit(n)互補(bǔ)
distinct- 篩選,通過(guò)流所生成元素的hashCode()和equals去除重復(fù)元素
2.2 映射
map -- 接收l(shuí)ambda,有元素轉(zhuǎn)換成其他形式或提取信息。接收一個(gè)函數(shù)作為參數(shù),該函數(shù)會(huì)被應(yīng)用到每一個(gè)元素上,并將其映射成一個(gè)新元素。
3.終止操作。
咨詢(xún)熱線(xiàn)
010-85377344
135-21581588
微信客服
QQ客服
3026106565 點(diǎn)擊咨詢(xún)