實現lambda表示式與傳統介面的對比
public class lambdatest
void printsomething(string str, print print)
public static void main(string args)
};//lambda寫法
print print01 = v-> system.out.println(v);
test.printsomething("sdfadf", print);
}}
陣列轉化為管道流
// 轉化為管道流
string strarr = ;
listlist1 = stream.of(strarr)
.filter(v->v.startswith("a"))
.collect(collectors.tolist());
system.out.println(list1);
flatmap
listlist = arrays.aslist("adfas","safdasf","sffwer");
liststrings = arrays.aslist(strarr);
listres1 = strings.stream().map(v->).collect(collectors.tolist());
// 把流拍平
listres2 = strings.stream()
//.flatmap(v->arrays.stream(v.split("")))
.flatmap(v->stream.of(v.split("")))
.collect(collectors.tolist());
system.out.println(res2);
排序規則
//都是正序 不加reserved
//都是倒序 最後乙個加reserved
//先倒序(reserved) 然後正序
//先正序(reserved) 然後倒序(reserved)
//排序
car01 car01 = new car01("a,asdf,", "a,a");
car01 car02 = new car01("b,bsfd,sf", "b,b");
car01 car03 = new car01("c,c", "cc");
car01 car04 = new car01("d,d", "dd");
car01 car05 = new car01("e,e", "dd");
car01 car06 = new car01("e,e", "aa");
listlist03 = new arraylist<>();
list03.add(car01);
list03.add(car02);
list03.add(car03);
list03.add(car04);
list03.add(car05);
list03.add(car06);
list03.sort(comparator.comparing(car01::getage)
.reversed()
.thencomparing(car01::getname)
.reversed()
);
anymatch
boolean flag01 = list03.stream().anymatch(v->v.getage().contains("a"));
boolean flag02 = list03.stream().allmatch(v->v.getage().contains("a"));
boolean flag03 = list03.stream().nonematch(v->v.getage().contains("a"));
system.out.println(flag01);
system.out.println(flag02);
system.out.println(flag03);
optional
//查詢並獲取第乙個
optionaloptional01 = list03.stream().filter(v->v.getage().startswith("a")).findfirst();
if(optional01.ispresent())
//查詢並獲取任意乙個
optionaloptional02 = list03.stream().filter(v->v.getage().startswith("e")).findany();
if(optional02.ispresent())
//npe
// 是否存在第乙個
boolean flag04 = list03.stream().filter(v->v.getage().startswith("z"))
.findfirst()
.ispresent();
system.out.println(flag04);
// 是否存在任意乙個
boolean flag05 = list03.stream().filter(v->v.getage().startswith("z"))
.findfirst()
.ispresent();
system.out.println("flag05--->"+flag05);
// 如果存在
list03.stream().filter(v->v.getage().startswith("a"))
.findfirst()
.ifpresent(v->system.out.println(v));
// 如果不存在還想給預設值
list03.stream().filter(v->v.getage().startswith("a"))
.findfirst()
.orelse(new car01("aaa", "bbb"));
//判斷是否為空然後進行map裡面的操作如果沒有值存在則返回orelse的值
optional.ofnullable(car5).map(car::getage).orelse(11);
reduce 規約
//規約
listnums = arrays.aslist(1,2,3,4);
integer total01 = nums.stream().reduce(0, (s1, ele)->s1 + ele);
system.out.println(total01);
integer total02 = nums.stream().reduce(0, integer::sum);
system.out.println(total02);
//字串累加
string total03 = list03.stream().map(car01::getage).reduce("", (o1, o2)->o1 + o2);
system.out.println(total03);
//並行字串累加
string total04 = list03.stream().parallel().map(car01::getage).reduce("", (o1, o2)->o1 + o2);
system.out.println(total03);
//並行後合併
integer total05 = nums.stream().parallel().reduce(0, integer::sum, integer::sum);
system.out.println(total05);
//reduce直接操作物件(string::concat 指定加和作為下一次的subtotal)
string total06 = list03.stream().parallel()
.reduce("", (subtotal, emp)->subtotal + emp.getage(),string::concat);
system.out.println(total05);
Lambda表示式詳解
1 天真熱,程式設計師活著不易,星期天,也要頂著火辣辣的太陽,總結這些東西。2 夸夸lambda吧 簡化了匿名委託的使用,讓你讓 更加簡潔,優雅。據說它是微軟自c 1.0後新增的最重要的功能之一。lambda運算子 所有的lambda表示式都是用新的lambda運算子 可以叫他,轉到 或者 成為 運...
Lambda表示式詳解
1 天真冷啊,程式設計師活著不易,星期天,也要嗖嗖的北風,總結這些東西。2 夸夸lambda吧 簡化了匿名委託的使用,讓你讓 更加簡潔,優雅。據說它是微軟自c 1.0後新增的最重要的功能之一。lambda運算子 所有的lambda表示式都是用新的lambda運算子 可以叫他,轉到 或者 成為 運算子...
Lambda表示式詳解
lambda表示式在很多語言中應用,lambda表示式可以當作委託中的一種變形,委託的構建方便程式設計人員能夠在程式中傳入函式,相當於回掉函式。lambda表示式可以方便的構造匿名函式,如果 中裡面存有大量小的功能函式,而這些函式只被呼叫一次,不妨將他們重構成lambda表示式。比如需要計算a b,...