lambda表示式詳解

2021-10-07 09:17:42 字數 4156 閱讀 3302

實現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,...