Java8 教程學(xué)習(xí)篇(一)

本套JAVA8教程由于是有英文翻譯過來的,如果有翻譯不對(duì)的地方還請(qǐng)多多包涵奕扣。

本節(jié)課先簡(jiǎn)單的介紹下Java8有哪些新特性,對(duì)于Java6/7版本做出哪些更改.那廢話不多說,趕緊開始今天的課程吧.

Lambda表達(dá)式 : 排序例子

  Comparator<developer> byName = new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getName().compareTo(o2.getName());
        }
    };

Lambda 表達(dá)式這樣操作.是不是簡(jiǎn)介了很多,還有更簡(jiǎn)明的寫法,先不要捉急,穩(wěn)扎穩(wěn)打.

  Comparator<developer> byName = 
        (Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());

下面寫一個(gè)不使用Lambda表達(dá)式來排序的方法

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class TestSorting {

    public static void main(String[] args) {

        List<developer> listDevs = getDevelopers();

        System.out.println("排序之前");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }

        //通過名age排序
        Collections.sort(listDevs, new Comparator<developer>() {
            @Override
            public int compare(Developer o1, Developer o2) {
                return o1.getAge() - o2.getAge();
            }
        });

        System.out.println("排序之后");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }

    }

    private static List<developer> getDevelopers() {

        List<developer> result = new ArrayList<developer>();

        result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
        result.add(new Developer("alvin", new BigDecimal("80000"), 20));
        result.add(new Developer("jason", new BigDecimal("100000"), 10));
        result.add(new Developer("iris", new BigDecimal("170000"), 55));

        return result;

    }

}

輸出內(nèi)容

排序之前
Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]

排序之后
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]
Developer [name=iris, salary=170000, age=55]

當(dāng)需要排序的數(shù)據(jù)發(fā)生變化的時(shí)候, 你只需要通過重寫匿名 Comparator 類來實(shí)現(xiàn) :

//通過age排序
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getAge() - o2.getAge();
        }
    });

    //通過name排序
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getName().compareTo(o2.getName());
        }
    });

    //通過Salary來排序
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getSalary().compareTo(o2.getSalary());
        }
    });

當(dāng)然這都是java8之前的啰嗦寫法. 這樣從邏輯上講沒有問題, 但是, 但是你想過沒有,你為了只改變一行代碼而創(chuàng)建了一個(gè)對(duì)象?是不是顯得很雞肋和笨重呢.

通過Lambda排序

在 Java 8里面, List 接口支持直接使用sort方法,再也不需要使用Collections.sort.

    listDevs.sort(new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o2.getAge() - o1.getAge();
        }
    });

Lambda 表達(dá)式例子 :

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class TestSorting {

    public static void main(String[] args) {
        List<User> listDevs = getList();
        System.out.println("排序之前");
        for (User user : listDevs) {
            System.out.println(user);
        }
        System.out.println("排序之后");
        //lambda 表達(dá)式!
        listDevs.sort((User o1, User o2)-&gt;o1.getAge()-o2.getAge());
        //java 8 , lambda也可以打印List
        listDevs.forEach((user)-&gt;System.out.println(user));
    }

    private static List<User> getList() {
        List<User> result = new ArrayList<User>();
        result.add(new User("mkyong", new BigDecimal("70000"), 33));
        result.add(new User("alvin", new BigDecimal("80000"), 20));
        result.add(new User("jason", new BigDecimal("100000"), 10));
        result.add(new User("iris", new BigDecimal("170000"), 55));
        return result;
    }
}

顛倒排序.

Comparator<User> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());
 listDevs.sort(salaryComparator);

使用java8顛倒排序

Comparator<User> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());
 listDevs.sort(salaryComparator.reversed());
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耍属,一起剝皮案震驚了整個(gè)濱河市夜焦,隨后出現(xiàn)的幾起案子隆敢,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衅澈,死亡現(xiàn)場(chǎng)離奇詭異猎醇,居然都是意外死亡窥突,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門硫嘶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阻问,“玉大人,你說我怎么就攤上這事沦疾〕平” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵曹鸠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我斥铺,道長(zhǎng)彻桃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任晾蜘,我火速辦了婚禮邻眷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剔交。我一直安慰自己肆饶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布岖常。 她就那樣靜靜地躺著驯镊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竭鞍。 梳的紋絲不亂的頭發(fā)上板惑,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音偎快,去河邊找鬼冯乘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晒夹,可吹牛的內(nèi)容都是我干的裆馒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼丐怯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼喷好!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起读跷,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤绒窑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后舔亭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體些膨,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟀俊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了订雾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肢预。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖洼哎,靈堂內(nèi)的尸體忽然破棺而出烫映,到底是詐尸還是另有隱情,我是刑警寧澤噩峦,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布锭沟,位于F島的核電站,受9級(jí)特大地震影響识补,放射性物質(zhì)發(fā)生泄漏族淮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一凭涂、第九天 我趴在偏房一處隱蔽的房頂上張望祝辣。 院中可真熱鬧,春花似錦切油、人聲如沸蝙斜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孕荠。三九已至,卻和暖如春攻谁,著一層夾襖步出監(jiān)牢的瞬間岛琼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工巢株, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槐瑞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓阁苞,卻偏偏與公主長(zhǎng)得像困檩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子那槽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 第一章 為什么要關(guān)心Java 8 使用Stream庫來選擇最佳低級(jí)執(zhí)行機(jī)制可以避免使用Synchronized(同...
    謝隨安閱讀 1,486評(píng)論 0 4
  • 簡(jiǎn)介 概念 Lambda 表達(dá)式可以理解為簡(jiǎn)潔地表示可傳遞的匿名函數(shù)的一種方式:它沒有名稱悼沿,但它有參數(shù)列表、函數(shù)主...
    劉滌生閱讀 3,194評(píng)論 5 18
  • 原文鏈接: Lambdas 原文作者: shekhargulati 譯者: leege100 lambda表達(dá)式是...
    忽來閱讀 6,574評(píng)論 8 129
  • Java8 in action 沒有共享的可變數(shù)據(jù)骚灸,將方法和函數(shù)即代碼傳遞給其他方法的能力就是我們平常所說的函數(shù)式...
    鐵牛很鐵閱讀 1,220評(píng)論 1 2
  • 本文是對(duì)Benjamin的JAVA8 教程的翻譯糟趾,原文地址如下: 原文地址 本文會(huì)逐步介紹JAVA8的新特性,通過...
    浮梁翁閱讀 2,975評(píng)論 0 29