/**
* 語(yǔ)法:() -> {}代碼塊替代
* () -> statement 無(wú)參數(shù)單語(yǔ)句
* () -> {statements} 無(wú)參數(shù)多語(yǔ)句
* (params) -> statement 單語(yǔ)句
* (params) -> { statements } 多語(yǔ)句
*/
public class LambdaTest {
public static void main(String... args) {
ArrayList<Person> peoples = new ArrayList<>();
peoples.add(new Person(22,"小明","北京",LocalDate.now()) );
peoples.add(new Person(23,"小花","上海",LocalDate.now().plusDays(1)) );
peoples.add(new Person(24,"小灰","杭州",LocalDate.now().minusDays(1)));
/**
* 替代匿名內(nèi)部類
*/
new Thread(()->System.out.println("無(wú)參且單語(yǔ)句lambda表達(dá)式")).start();
Collections.sort(peoples,(o1,o2)-> {return compareDateTime(o1,o2);});
/**
* 替代foreach遍歷list:mapfilter
*/
peoples.stream().filter((person)->person.age>23).forEach(person ->System.out.println("過(guò)濾年齡大于23:"+person.toString()) );
peoples.stream().map((person)->{person.setAge(person.age+1);return person;}).forEach(person ->System.out.println("返回年齡加1的對(duì)象:"+person.toString()) );
peoples.stream().filter(person -> person.age==23).map((person)->person.age+1).forEach(person ->System.out.println("年齡加1富蓄,僅返回age:"+person.toString()) );
/**
* 方法引用
*/
//靜態(tài)方法引用
peoples.stream().filter(person -> person.age==25).forEach(people ->System.out.println(Person.staticMethodUse()));
//實(shí)例方法引用
peoples.stream().filter(person -> person.age==25).forEach(people->System.out.println(people.methodUseWithParam(people)));
//函數(shù)接口引用
//對(duì)象調(diào)用
peoples.stream().filter(person -> person.age==25).forEach(people->System.out.println(people.funcInterface(people::funcUse,people)));
//類調(diào)用靜態(tài)方法
peoples.stream().filter(person -> person.age==25).forEach(people->System.out.println(Person.funcInterface(people::funcUse,people)));
//構(gòu)造方法引用
peoples.stream().filter(person -> person.age==25).forEach(people->System.out.println(Person.funcInterface(people::funcUse,people)));
MyClassFunc myClassFunc= Person::new;
Person person = myClassFunc.func(22, "小明", "北京", LocalDate.now());
System.out.print("構(gòu)造方法引用:"+person.toString());
}
private static Integer compareDateTime(Person o1,Person o2) {
if (o1.getDateTime().isBefore(o2.getDateTime())){
return 1;
}else if (o1.getDateTime().isAfter(o2.getDateTime())){
return -1;
}else {
return 0;
}
}
/**
* 函數(shù)式接口
* 函數(shù)式接口(Functional Interface)就是一個(gè)具有具有唯一的一個(gè)抽像方法接口。
* 函數(shù)式接口可以被隱式轉(zhuǎn)換為lambda表達(dá)式澳骤。
* 函數(shù)式接口里面可以定義多種方法的默認(rèn)實(shí)現(xiàn)WTF....
*/
@FunctionalInterface
public interface StringFunc {
String func(Person person);
}
@FunctionalInterface
public interface MyClassFunc {
Person func(Integer age, String name, String provence, LocalDate dateTime);
}
/**
* MODAL
*/
private static class Person {
private Integer age;
private String name;
private String provence;
private LocalDate dateTime;
public Person(Integer age, String name, String provence, LocalDate dateTime) {
this.age = age;
this.name = name;
this.provence = provence;
this.dateTime = dateTime;
}
public static String funcInterface(StringFunc stringFunc,Person person){
return stringFunc.func(person);
}
public String funcUse(Person person){
return"函數(shù)式方法引用"+person.toString();
}
public String methodUseWithParam(Person person){
return"帶參數(shù)的實(shí)例方法引用"+person.toString();
}
public static String staticMethodUse(){
return"靜態(tài)方法引用";
}
public LocalDate getDateTime() {
return dateTime;
}
public void setDateTime(LocalDate dateTime) {
this.dateTime = dateTime;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProvence() {
return provence;
}
public void setProvence(String provence) {
this.provence = provence;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", provence='" + provence + '\'' +
", dateTime=" + dateTime +
'}';
}
}
}
JAVA8應(yīng)用-Lambda表達(dá)式
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妒峦,“玉大人重斑,你說(shuō)我怎么就攤上這事】虾В” “怎么了窥浪?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)累盗。 經(jīng)常有香客問(wèn)我寒矿,道長(zhǎng),這世上最難降的妖魔是什么若债? 我笑而不...
- 正文 為了忘掉前任符相,我火速辦了婚禮,結(jié)果婚禮上蠢琳,老公的妹妹穿的比我還像新娘啊终。我一直安慰自己,他們只是感情好傲须,可當(dāng)我...
- 文/花漫 我一把揭開白布蓝牲。 她就那樣靜靜地躺著,像睡著了一般泰讽。 火紅的嫁衣襯著肌膚如雪例衍。 梳的紋絲不亂的頭發(fā)上,一...
- 那天已卸,我揣著相機(jī)與錄音佛玄,去河邊找鬼。 笑死累澡,一個(gè)胖子當(dāng)著我的面吹牛梦抢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愧哟,決...
- 文/蒼蘭香墨 我猛地睜開眼奥吩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哼蛆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起霞赫,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腮介,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绩脆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萤厅,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年靴迫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惕味。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站参淫,受9級(jí)特大地震影響救湖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涎才,卻給世界環(huán)境...
- 文/蒙蒙 一鞋既、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耍铜,春花似錦邑闺、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至伴挚,卻和暖如春靶衍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茎芋。 一陣腳步聲響...
- 正文 我出身青樓帚呼,卻偏偏與公主長(zhǎng)得像掏缎,于是被迫代替她去往敵國(guó)和親皱蹦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子煤杀,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 你要知道的Java8 匿名內(nèi)部類、函數(shù)式接口沪哺、lambda表達(dá)式與Stream API都在這里 轉(zhuǎn)載請(qǐng)注明出處 h...
- 0x00 例子 1沈自、 用lambda表達(dá)式實(shí)現(xiàn)Runnable 輸出結(jié)果: 2、使用lambda表達(dá)式對(duì)列表進(jìn)行迭...
- 1.把Lambda付諸實(shí)踐:環(huán)繞執(zhí)行模式 ??讓我們通過(guò)一個(gè)例子辜妓,看看在實(shí)踐中如何利用Lambda和行為參數(shù)化來(lái)讓...
- Android交流qq群號(hào) 29552133 這篇文章只包含lambda表達(dá)式的基礎(chǔ)內(nèi)容枯途。主要包括,lambda表...