成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java8-Lambda表達(dá)式使用與Stream API

endless_road / 770人閱讀

摘要:前置數(shù)據(jù)提取對(duì)象中的一列提取列第一種寫法簡(jiǎn)單一點(diǎn)的寫法通過(guò)字段中條件過(guò)濾集合列表只要年紀(jì)大于歲的人列表中對(duì)象數(shù)值型列數(shù)據(jù)求和求和全部年紀(jì)取出集合符合條件的第一個(gè)元素取出年紀(jì)為歲的人簡(jiǎn)寫對(duì)集合中對(duì)象

0x00. 前置數(shù)據(jù)
private List peoples = null;

@BeforeEach void before () {
    peoples = new ArrayList<>();
    peoples.add(new People("K.O1", 21, new Date()));
    peoples.add(new People("K.O3", 23, new Date()));
    peoples.add(new People("K.O4", 24, new Date()));
    peoples.add(new People("K.O5", 25, new Date()));
    peoples.add(new People("K.O2", 22, new Date()));
    peoples.add(new People("K.O6", 26, new Date()));
}
0x01. 提取對(duì)象中的一列
/**
* 提取1列
*/
@Test void whenExtractColumnSuccess () {
    //第一種寫法
    List ages1 = peoples.stream().map(people -> people.getAge()).collect(Collectors.toList());
    System.out.println("###println: args1----");
    ages1.forEach(System.out::println);

    //簡(jiǎn)單一點(diǎn)的寫法
    List ages2 = peoples.stream().map(People::getAge).collect(Collectors.toList());
    System.out.println("###println: args2----");
    ages1.forEach(System.out::println);
}
###println: args1----
21
22
23
24
25
26
###println: args2----
21
22
23
24
25
26
0x02. 通過(guò)字段中條件過(guò)濾集合列表
/**
    * 只要年紀(jì)大于25歲的人
    */
@Test void whenFilterAgeGT25Success () {
    List peoples1 = peoples.stream().filter(x -> x.getAge() > 25).collect(Collectors.toList());
    peoples1.forEach(x -> System.out.println(x.toString()));
}
People{name="K.O6", age=26, birthday=Wed May 15 22:20:22 CST 2019}
0x03. 列表中對(duì)象數(shù)值型列數(shù)據(jù)求和
/**
    * 求和全部年紀(jì)
    */
@Test void sumAllPeopleAgeSuccess () {
    Integer sum1 = peoples.stream().collect(Collectors.summingInt(People::getAge));
    System.out.println("###sum1: " + sum1);
    Integer sum2 = peoples.stream().mapToInt(People::getAge).sum();
    System.out.println("###sum2: " + sum2);
}
    ###sum1: 141
    ###sum2: 141
0x04. 取出集合符合條件的第一個(gè)元素
/**
    * 取出年紀(jì)為25歲的人
    */
@Test void extractAgeEQ25Success () {
    Optional optionalPeople =  peoples.stream().filter(x -> x.getAge() == 25).findFirst();
    if (optionalPeople.isPresent()) System.out.println("###name1: " + optionalPeople.get().getName());

    //簡(jiǎn)寫
    peoples.stream().filter(x -> x.getAge() == 25).findFirst().ifPresent(x -> System.out.println("###name2: " + x.getName()));
}
###name1: K.O5
###name2: K.O5
0x05. 對(duì)集合中對(duì)象字符列按規(guī)則拼接
/**
    * 逗號(hào)拼接全部名字
    */
@Test void printAllNameSuccess () {
    String names = peoples.stream().map(People::getName).collect(Collectors.joining(","));
    System.out.println(names);
}
K.O1,K.O2,K.O3,K.O4,K.O5,K.O6
0x06. 將集合元素提取,轉(zhuǎn)為Map
/**
    * 將集合轉(zhuǎn)成(name, age) 的map
    */
@Test void list2MapSuccess () {
    Map map1 = peoples.stream().collect(Collectors.toMap(People::getName, People::getAge));
    map1.forEach((k, v) -> System.out.println(k + ":" + v));

    System.out.println("--------");

    //(name object)
    Map map2 = peoples.stream().collect(Collectors.toMap(People::getName, People::getThis));
    map2.forEach((k, v) -> System.out.println(k + ":" + v.toString()));
}

//People中自己實(shí)現(xiàn)的方法
public People getThis () {
    return this;
}
K.O2:22
K.O3:23
K.O1:21
K.O6:26
K.O4:24
K.O5:25
--------
K.O2:People{name="K.O2", age=22, birthday=Wed May 15 22:42:39 CST 2019}
K.O3:People{name="K.O3", age=23, birthday=Wed May 15 22:42:39 CST 2019}
K.O1:People{name="K.O1", age=21, birthday=Wed May 15 22:42:39 CST 2019}
K.O6:People{name="K.O6", age=26, birthday=Wed May 15 22:42:39 CST 2019}
K.O4:People{name="K.O4", age=24, birthday=Wed May 15 22:42:39 CST 2019}
K.O5:People{name="K.O5", age=25, birthday=Wed May 15 22:42:39 CST 2019}
0x07. 按集合某一屬性進(jìn)行分組
/**
    * 按名字分組
    */
@Test void listGroupByNameSuccess() {
    //添加一個(gè)元素方便看效果
    peoples.add(new People("K.O1", 29, new Date()));
    Map> map = peoples.stream().collect(Collectors.groupingBy(People::getName));

    map.forEach((k, v) -> System.out.println(k + ":" + v.size()));
}
K.O2:1
K.O3:1
K.O1:2
K.O6:1
K.O4:1
K.O5:1
0x08. 求集合對(duì)象數(shù)值列平均數(shù)
/**
    * 求人平均年齡
    */
@Test void averagingAgeSuccess () {
    Double avgAge = peoples.stream().collect(Collectors.averagingInt(People::getAge));
    System.out.println(avgAge);
}
23.5
0x09. 對(duì)集合按某一列排序
/**
    * 按年齡排序
    */
@Test void sortByAgeSuccess () {
    System.out.println("###排序前---");
    peoples.forEach(x -> System.out.println(x.getAge()));

    peoples.sort((x, y) -> {
        if (x.getAge() > y.getAge()) {
            return 1;
        } else if (x.getAge() == y.getAge()) {
            return 0;
        }
        return -1;
    });

    System.out.println("###排序后---");
    peoples.forEach(x -> System.out.println(x.getAge()));
}
###排序前---
21
23
24
25
22
26
###排序后---
21
22
23
24
25
26
未完待續(xù)

<源碼地址:https://github.com/cos2a/learning-repo/tree/master/core-java8>

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77700.html

相關(guān)文章

  • Java8的流(stream)操作

    摘要:串行與并行可以分為串行與并行兩種,串行流和并行流差別就是單線程和多線程的執(zhí)行。返回串行流返回并行流和方法返回的都是類型的對(duì)象,說(shuō)明它們?cè)诠δ艿氖褂蒙鲜菦](méi)差別的。唯一的差別就是單線程和多線程的執(zhí)行。 Stream是什么 Stream是Java8中新加入的api,更準(zhǔn)確的說(shuō): Java 8 中的 Stream 是對(duì)集合(Collection)對(duì)象功能的增強(qiáng),它專注于對(duì)集合對(duì)象進(jìn)行各種非常便...

    yacheng 評(píng)論0 收藏0
  • Java8新特性總覽

    摘要:新特性總覽標(biāo)簽本文主要介紹的新特性,包括表達(dá)式方法引用流默認(rèn)方法組合式異步編程新的時(shí)間,等等各個(gè)方面。還有對(duì)應(yīng)的和類型的函數(shù)連接字符串廣義的歸約匯總起始值,映射方法,二元結(jié)合二元結(jié)合。使用并行流時(shí)要注意避免共享可變狀態(tài)。 Java8新特性總覽 標(biāo)簽: java [TOC] 本文主要介紹 Java 8 的新特性,包括 Lambda 表達(dá)式、方法引用、流(Stream API)、默認(rèn)方...

    mayaohua 評(píng)論0 收藏0
  • Java 8 vs. Scala(二):Stream vs. Collection

    摘要:比如對(duì)一個(gè)數(shù)據(jù)流進(jìn)行過(guò)濾映射以及求和運(yùn)算,通過(guò)使用延后機(jī)制,那么所有操作只要遍歷一次,從而減少中間調(diào)用。這里需知道中的元素都是延遲計(jì)算的,正因?yàn)榇?,能夠?jì)算無(wú)限數(shù)據(jù)流。 【編者按】在之前文章中,我們介紹了 Java 8和Scala的Lambda表達(dá)式對(duì)比。在本文,將進(jìn)行 Hussachai Puripunpinyo Java 和 Scala 對(duì)比三部曲的第二部分,主要關(guān)注 Stream...

    GeekGhc 評(píng)論0 收藏0
  • JDK1.8-Stream中常用的API(流操作)

    摘要:運(yùn)行機(jī)制分為源,中間操作,終止操作。反過(guò)來(lái)說(shuō),目前還無(wú)法專為某個(gè)并行流指定這個(gè)值。我們?cè)诒竟?jié)中已經(jīng)指出,并行流不總是比順序流快。特別是和等依賴于元素順序的操作,它們?cè)诓⑿辛魃蠄?zhí)行的代價(jià)非常大。1 Stream Stream是一組用來(lái)處理數(shù)組,集合的API。 1.1 特性 不是數(shù)據(jù)結(jié)構(gòu),沒(méi)有內(nèi)部存儲(chǔ)。 不支持索引訪問(wèn)。 延遲計(jì)算 支持并行 很容易生成數(shù)據(jù)或集合 支持過(guò)濾,查找,轉(zhuǎn)換,匯總,...

    Shimmer 評(píng)論0 收藏0
  • Java 8 新特性之Stream API

    摘要:簡(jiǎn)而言之,提供了一種高效且易于使用的處理數(shù)據(jù)的方式。和以前的操作不同,操作還有兩個(gè)基礎(chǔ)的特征中間操作都會(huì)返回流對(duì)象本身。注意自己不會(huì)存儲(chǔ)元素不會(huì)改變?cè)磳?duì)象,相反,它們會(huì)返回一個(gè)持有結(jié)果的新操作時(shí)延遲執(zhí)行的。為集合創(chuàng)建并行流。 1. 概述 1.1 簡(jiǎn)介 Java 8 中有兩大最為重要的改革,第一個(gè)是 Lambda 表達(dá)式,另外一個(gè)則是 Stream API(java.util.strea...

    cooxer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<