java 8 Lambda 表達(dá)式用例(Lambda expressions example)

java 8 Lambda 表達(dá)式用例

import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.Test;

import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;

import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;
/**
 * @description: Lambda expressions example
 * @author zivs.zheng
 * @date 2018/3/23 11:27
 */
public class LambdaExample {

    // java 開(kāi)發(fā)人員集合
    List<Person> javaPersons = new ArrayList<Person>() {{
        add(new Person("Tom", "java development", "M", 2000, 28));
        add(new Person("Bob", "java development", "M", 2500, 22));
        add(new Person("Fei", "java development", "F", 1900, 21));
        add(new Person("Jac", "java development", "M", 2300, 25));
        add(new Person("Hua", "java development", "F", 1800, 22));
        add(new Person("Wei", "java development", "F", 2000, 23));
        add(new Person("Tao", "java development", "M", 3000, 27));
    }};

    // go 開(kāi)發(fā)人員集合
    List<Person> goPersons = new ArrayList<Person>() {{
        add(new Person("Men", "go development", "F", 2000, 24));
        add(new Person("Mao", "go development", "M", 2500, 23));
        add(new Person("Qin", "go development", "F", 1900, 22));
        add(new Person("Don", "go development", "M", 2300, 25));
        add(new Person("Han", "go development", "M", 2400, 28));
    }};


    @Test
    public void iterateJavaPersons() {
        // Lambda表達(dá)式迭代java開(kāi)發(fā)人員集合
        javaPersons.forEach((p) -> System.out.println(p.getName() + "\t" + p.getSalary()));

        System.out.println("增加銷(xiāo)售額10%:");
        Consumer<Person> giveRaise = e -> e.setSalary(e.getSalary() / 100 * 10 + e.getSalary());
        javaPersons.forEach(giveRaise);
        javaPersons.forEach((p) -> System.out.println(p.getName() + "\t" + p.getSalary()));
    }


    @Test
    public void sortJavaPersons() {

        Collections.sort(javaPersons, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                if (p1.getAge() > p2.getAge()) {
                    return 1;
                }
                return -1;
            }
        });
        javaPersons.forEach((p) -> System.out.println(p.getName() + "\t" + p.getAge()));
        System.out.println();

        // 匿名內(nèi)部?jī)?nèi)
        javaPersons.sort((Person p1, Person p2) -> {
            if (p1.getAge() > p2.getAge()) {
                return 1;
            }
            return -1;
        });
        // Lambda表達(dá)式迭代java開(kāi)發(fā)人員集合
        javaPersons.forEach((p) -> System.out.println(p.getName() + "\t" + p.getAge()));
    }


    @Test
    public void filterJavaPersons() {
        // 定義 filters
        Predicate<Person> ageFilter = (p) -> (p.getAge() > 25);
        Predicate<Person> salaryFilter = (p) -> (p.getSalary() > 2000);
        Predicate<Person> genderFilter = (p) -> ("M".equals(p.getGender()));

        System.out.println("過(guò)濾年齡大于25銷(xiāo)售額大于2000性別為M的:");
        javaPersons.stream()
                .filter(ageFilter)
                .filter(salaryFilter)
                .filter(genderFilter)
                .forEach((p) -> System.out.println(p));
        System.out.println();
        System.out.println("過(guò)濾年齡大于25銷(xiāo)售額大于2000的:");
        goPersons.stream()
                .filter(ageFilter)
                .filter(salaryFilter)
                .forEach((p) -> System.out.println(p));

    }

    @Test
    public void limitPersons() {
        // 根據(jù)name排序的前五個(gè)
        List<Person> result = javaPersons
                .stream()
                .sorted((p1, p2) -> (p1.getName().compareTo(p2.getName())))
                .limit(5)
                .collect(toList());
        result.forEach((p) -> System.out.println(p));
    }

    @Test
    public void minMaxPersons() {
        System.out.println("銷(xiāo)售額最小:");
        Person minPerson = javaPersons
                .stream()
                .min((p1, p2) -> (p1.getSalary() - p2.getSalary()))
                .get();
        System.out.println(minPerson);
        System.out.println();
        System.out.println("銷(xiāo)售額最大:");
        Person maxPerson = javaPersons
                .stream()
                .max((p1, p2) -> (p1.getSalary() - p2.getSalary()))
                .get();
        System.out.println(maxPerson);
    }

    @Test
    public void sumSalaryPersons() {
        // Salary 之和
        int totalSalary = javaPersons
                .parallelStream()
                .mapToInt(p -> p.getSalary())
                .sum();
        System.out.println(totalSalary);
    }

    @Test
    public void setPersons() {
        // 獲取姓名的集合
        Set<String> mapPersons = javaPersons
                .stream()
                .map(Person::getName)
                .collect(toSet());
        mapPersons.forEach(m -> System.out.println(m.toString()));


        System.out.println();
        // 以“,”拼接姓名
        String personsStr = javaPersons
                .stream()
                .map(Person::getName)
                .collect(joining(" , "));
        System.out.println(personsStr);
    }

    @Test
    public void statsPersons() {
        IntSummaryStatistics stats = javaPersons
                .stream()
                .mapToInt((p) -> p.getAge())
                .summaryStatistics();

        System.out.println("Max age : " + stats.getMax());
        System.out.println("Min age : " + stats.getMin());
        System.out.println("Sum age : " + stats.getSum());
        System.out.println("Avg age : " + stats.getAverage());
    }

    @Test
    public void variables() {
        int n = 0;
        final int k = n;
        Runnable r = () -> {
            int i = k;
            System.out.println("i = " + i);
        };
        n++;
        r.run();
    }

}

@Data
@AllArgsConstructor
class Person {
    private String name, job, gender;
    private int salary, age;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赡盘,更是在濱河造成了極大的恐慌糊肤,老刑警劉巖爹耗,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件核芽,死亡現(xiàn)場(chǎng)離奇詭異榨婆,居然都是意外死亡簿煌,警方通過(guò)查閱死者的電腦和手機(jī)氮唯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)姨伟,“玉大人惩琉,你說(shuō)我怎么就攤上這事《峄模” “怎么了瞒渠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)技扼。 經(jīng)常有香客問(wèn)我伍玖,道長(zhǎng),這世上最難降的妖魔是什么剿吻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任窍箍,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘椰棘。我一直安慰自己纺棺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布邪狞。 她就那樣靜靜地躺著祷蝌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帆卓。 梳的紋絲不亂的頭發(fā)上巨朦,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音鳞疲,去河邊找鬼罪郊。 笑死蠕蚜,一個(gè)胖子當(dāng)著我的面吹牛尚洽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播靶累,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼腺毫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了挣柬?” 一聲冷哼從身側(cè)響起潮酒,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邪蛔,沒(méi)想到半個(gè)月后急黎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侧到,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年勃教,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匠抗。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡故源,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汞贸,到底是詐尸還是另有隱情绳军,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布矢腻,位于F島的核電站门驾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏多柑。R本人自食惡果不足惜猎唁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诫隅,春花似錦腐魂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至豁生,卻和暖如春兔毒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甸箱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工育叁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芍殖。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓豪嗽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親豌骏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子龟梦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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