JAVA8應(yīng)用-Lambda表達(dá)式

/**
 *  語(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 +
                    '}';
        }


    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市澜薄,隨后出現(xiàn)的幾起案子为肮,更是在濱河造成了極大的恐慌,老刑警劉巖肤京,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颊艳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡忘分,警方通過(guò)查閱死者的電腦和手機(jī)棋枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妒峦,“玉大人重斑,你說(shuō)我怎么就攤上這事】虾В” “怎么了窥浪?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)累盗。 經(jīng)常有香客問(wèn)我寒矿,道長(zhǎng),這世上最難降的妖魔是什么若债? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任符相,我火速辦了婚禮,結(jié)果婚禮上蠢琳,老公的妹妹穿的比我還像新娘啊终。我一直安慰自己,他們只是感情好傲须,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布蓝牲。 她就那樣靜靜地躺著,像睡著了一般泰讽。 火紅的嫁衣襯著肌膚如雪例衍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天已卸,我揣著相機(jī)與錄音佛玄,去河邊找鬼。 笑死累澡,一個(gè)胖子當(dāng)著我的面吹牛梦抢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愧哟,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奥吩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哼蛆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起霞赫,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腮介,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绩脆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萤厅,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年靴迫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惕味。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玉锌,死狀恐怖名挥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情主守,我是刑警寧澤禀倔,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站参淫,受9級(jí)特大地震影響救湖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涎才,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一鞋既、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耍铜,春花似錦邑闺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至伴挚,卻和暖如春靶衍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茎芋。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工颅眶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人败徊。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓帚呼,卻偏偏與公主長(zhǎng)得像掏缎,于是被迫代替她去往敵國(guó)和親皱蹦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子煤杀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 你要知道的Java8 匿名內(nèi)部類、函數(shù)式接口沪哺、lambda表達(dá)式與Stream API都在這里 轉(zhuǎn)載請(qǐng)注明出處 h...
    WWWWDotPNG閱讀 4,899評(píng)論 2 15
  • 0x00 例子 1沈自、 用lambda表達(dá)式實(shí)現(xiàn)Runnable 輸出結(jié)果: 2、使用lambda表達(dá)式對(duì)列表進(jìn)行迭...
    驪驊閱讀 955評(píng)論 0 0
  • 1.把Lambda付諸實(shí)踐:環(huán)繞執(zhí)行模式 ??讓我們通過(guò)一個(gè)例子辜妓,看看在實(shí)踐中如何利用Lambda和行為參數(shù)化來(lái)讓...
    瓊珶和予閱讀 291評(píng)論 0 0
  • Android交流qq群號(hào) 29552133 這篇文章只包含lambda表達(dá)式的基礎(chǔ)內(nèi)容枯途。主要包括,lambda表...
    yftx_閱讀 566評(píng)論 0 2
  • 就是這么直白地真切的感受--姨媽痛籍滴。不管是躺著酪夷,坐著,站著孽惰,肚子都被拉扯地痛晚岭。就像在一片虛空里,無(wú)數(shù)漂浮的石塊...
    天馬行空的松子閱讀 304評(píng)論 0 4