女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java8的Stream流 map() 方法

科技綠洲 ? 來(lái)源:了不起 ? 作者:了不起 ? 2023-09-25 11:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在日常的開發(fā)工作中經(jīng)常碰到要處理 List 中數(shù)據(jù)的問(wèn)題,比如從一個(gè)對(duì)象集合中獲得對(duì)象中的一個(gè)屬性的集合。之前我們想到的是遍歷每個(gè)元素,然后取出來(lái)放到另外一個(gè)集合中,比較繁瑣;在 Java8 之后,對(duì)集合可以進(jìn)行 Stream 操作,使上面的處理更簡(jiǎn)潔。

概述

Stream 流式處理中有 map() 方法,先看下其定義,該方法在java.util.stream.Stream類中

圖片

可以看到 map() 方法接收一個(gè)函數(shù)式接口參數(shù),入?yún)⒂幸粋€(gè) T ,返回一個(gè) Stream 流,這個(gè)流是 R 泛型。主要有以下幾點(diǎn)注意,

  • 入?yún)⑹且粋€(gè)流中的元素;
  • 出參是一個(gè)流,且流中是新元素;

用圖表示就是下面的樣子,原始流中有四個(gè)圓形圖案,調(diào)用 map() 函數(shù)后變成了四個(gè)五角星圖案,這里的圓形圖案和五角星圖案是一一對(duì)應(yīng)的,也就是原始流中有多少個(gè)元素,調(diào)用 map() 方法后依舊有多少個(gè)元素,唯一改變的是流中的元素類型。

圖片

示例

我們先創(chuàng)建一個(gè)實(shí)體類 Student.java

@Data
public class Student implements Serializable {
    /**
     * 姓名
     */
    private String name;
    /**
     * 班級(jí)
     */
    private String schoolClass;
    /**
     *語(yǔ)文成績(jī)
     */
    private Integer chineseScore;
    /**
     * 數(shù)學(xué)成績(jī)
     */
    private Integer mathScore;
}

再創(chuàng)建一個(gè)初始化數(shù)據(jù)的類:

public class DataFactory {
    public static List< Student > initData(){
        List< Student > list= new ArrayList<  >();
        Student s1=new Student();
        s1.setName("湯霖");
        s1.setSchoolClass("小一班");
        s1.setChineseScore(87);
        s1.setMathScore(95);
        list.add(s1);
 
        Student s2=new Student();
        s2.setName("李牧唐");
        s2.setSchoolClass("小二班");
        s2.setChineseScore(98);
        s2.setMathScore(97);
        list.add(s2);
 
        Student s3=new Student();
        s3.setName("顧北辰");
        s3.setSchoolClass("二年級(jí)");
        s3.setChineseScore(89);
        s3.setMathScore(94);
        list.add(s3);
 
        Student s4=new Student();
        s4.setName("言言");
        s4.setSchoolClass("小二班");
        s4.setChineseScore(100);
        s4.setMathScore(90);
        list.add(s4);
 
        Student s5=new Student();
        s5.setName("大運(yùn)");
        s5.setSchoolClass("小三班");
        s5.setChineseScore(96);
        s5.setMathScore(100);
        list.add(s5);
        return list;
    }
}

找出所有的學(xué)生姓名

public static void main(String[] args) {
    DataFactory.initData().stream()
        .map(student - > student.getName())
        .forEach(System.out::println);
}

這里使用了 map() 方法,入?yún)⑹?Student,出參是以 String 為泛型的流,最后使用 forEach 進(jìn)行了打印,看下結(jié)果

圖片

可以看到剛好把所有的學(xué)生姓名均打印出來(lái)了。如果想把這些學(xué)生姓名放到一個(gè)List中怎么辦?

將學(xué)生姓名放到list中

public static void main(String[] args) {
    //將所有的學(xué)生姓名放到list中
    List< String > studentNames = DataFactory.initData().stream()
        .map(student - > student.getName())
        .collect(Collectors.toList());
    for (String studentName : studentNames) {
        System.out.println(studentName);
    }
}

同樣的找出所有的班級(jí),找出所有學(xué)生的成績(jī)都可類比上面的,可以看到打印出的學(xué)生姓名或班級(jí)是有重復(fù)數(shù)據(jù),這個(gè)要怎么解決。我們知道在最后是把數(shù)據(jù)放到 List 中,為了解決重復(fù)的問(wèn)題可以把數(shù)據(jù)放到 Set 中,利用 Set 的去重功能:

//將學(xué)生姓名放到Set中,可以實(shí)現(xiàn)去重功能
Set< String > studentNames = DataFactory.initData().stream()
    .map(student - > student.getName())
    .collect(Collectors.toSet());

結(jié)果不再打印,有興趣的可以自己試試。

將姓名為“湯霖”的語(yǔ)文成績(jī)置為90

現(xiàn)在有這樣一個(gè)需求,要把姓名為湯霖學(xué)生的語(yǔ)文成績(jī)置為90,看下利用 map() 函數(shù)怎么做?

public static void main(String[] args) {
    List< Student > students = DataFactory.initData();

    List< Student > studentNames = students.stream().map(student - > {
        if ("湯霖".equals(student.getName())) {
            student.setChineseScore(90);
        }
        return student;
    }).collect(Collectors.toList());

    for (Student studentName : studentNames) {
        System.out.println(studentName);
    }
    //打印老的list
    System.out.println("-----改之前的數(shù)據(jù)-----");
    for (Student studentName : students) {
        System.out.println(studentName);
    }
}

輸出結(jié)果:

圖片

從上面的結(jié)果中可以看出,湯霖的語(yǔ)文成績(jī)的確被改為了90,這點(diǎn)是沒(méi)錯(cuò)的。再看原數(shù)據(jù)也被改為了90,上面提到過(guò) map() 方法生成的是一個(gè)新流,原始流中的數(shù)據(jù)也被修改了,因?yàn)橄旅孢@行代碼是在原始流中元素的基礎(chǔ)上修改的引用類型中的數(shù)據(jù),導(dǎo)致的原始流中的數(shù)據(jù)也會(huì)改。

總結(jié)

Java8 的 Stream 流 map() 方法是將流中的元素轉(zhuǎn)換為另外一個(gè)流中的元素,轉(zhuǎn)換前后兩個(gè)流的元素個(gè)數(shù)不發(fā)生改變。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8973

    瀏覽量

    153477
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7250

    瀏覽量

    91561
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2988

    瀏覽量

    108508
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4378

    瀏覽量

    64558
  • Stream
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    8118
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Stream API原理介紹

    Stream API 是 Java 8 中最重要的新特性之一,它是處理集合和數(shù)組的一種新方式。它提供了一種簡(jiǎn)單、靈活和可讀的方式來(lái)處理集合和數(shù)組中的元素,從而使代碼更加簡(jiǎn)潔、高效和易于維護(hù)。 1.
    的頭像 發(fā)表于 09-30 15:31 ?966次閱讀

    JAVA學(xué)習(xí)直通車(教程+書籍+100個(gè)實(shí)例+問(wèn)題與解答)

    對(duì)于Java8的并行并不陌生,沒(méi)錯(cuò),我們常常用它來(lái)執(zhí)行并行任務(wù),但是由于并行(parallel stream)采用的是享線程池,可能會(huì)對(duì)我們的性能造成嚴(yán)重影響,那怎么處理呢?`
    發(fā)表于 10-25 14:35

    java8新特性

    java8為接口聲明添加非抽象方法的實(shí)現(xiàn),也成為拓展方法
    發(fā)表于 11-27 15:54 ?1827次閱讀

    Java Map的幾種循環(huán)方式學(xué)習(xí)總結(jié)

    本文檔內(nèi)容介紹了基于Java Map的幾種循環(huán)方式學(xué)習(xí)總結(jié),供參考
    發(fā)表于 03-19 15:51 ?0次下載

    Java并行存在的問(wèn)題及解決辦法詳解

    對(duì)于從事Java開發(fā)的童鞋來(lái)說(shuō),相信對(duì)于Java8的并行并不陌生,沒(méi)錯(cuò),我們常常用它來(lái)執(zhí)行并行任務(wù),但是由于并行(parallel stream
    發(fā)表于 04-03 15:55 ?12次下載

    如何利用Stream API來(lái)優(yōu)化Java代碼

    使用Stream API優(yōu)化代碼 Java8的新特性主要是Lambda表達(dá)式和,當(dāng)和Lambda表達(dá)式結(jié)合起來(lái)一起使用時(shí),因?yàn)?b class='flag-5'>流申明式處
    的頭像 發(fā)表于 07-26 14:30 ?1471次閱讀

    JAVA8提供了Optional類來(lái)優(yōu)化這種寫法

    這種寫法是比較丑陋的,為了避免上述丑陋的寫法,讓丑陋的設(shè)計(jì)變得優(yōu)雅。JAVA8提供了Optional類來(lái)優(yōu)化這種寫法,接下來(lái)的正文部分進(jìn)行詳細(xì)說(shuō)明
    的頭像 發(fā)表于 04-24 15:18 ?1324次閱讀

    JDK8 Stream數(shù)據(jù)效率分析

    StreamJava SE 8類庫(kù)中新增的關(guān)鍵抽象,它被定義于 java.util.stream (這個(gè)包里有若干流類型:Stream
    的頭像 發(fā)表于 08-17 10:53 ?1470次閱讀

    javastream編程調(diào)試技巧

      javastream編程給調(diào)試帶來(lái)了極大的不便,idea 推出了streamtrace功能,可以詳細(xì)看到每一步操作的關(guān)系、結(jié)果,非常方便進(jìn)行調(diào)試。初遇StreamTrace這里簡(jiǎn)單將字符串轉(zhuǎn)成它的字符數(shù),并設(shè)置斷點(diǎn)開啟debug模式。
    的頭像 發(fā)表于 10-11 11:06 ?1794次閱讀

    Java 8 Stream底層原理

    初識(shí)lambda呢,函數(shù)式接口肯定是繞不過(guò)去的,函數(shù)式接口就是一個(gè)有且僅有一個(gè)抽象方法,但是可以有多個(gè)非抽象方法的接口。函數(shù)式接口可以被隱式轉(zhuǎn)換為lambda表達(dá)式。
    的頭像 發(fā)表于 11-18 10:27 ?1601次閱讀

    怎么使用Java8Stream API比較兩個(gè)List的差異呢?

    可以使用Java8Stream API來(lái)比較兩個(gè)List的差異,并取出不同的對(duì)象。
    的頭像 發(fā)表于 08-12 11:15 ?2531次閱讀

    List 轉(zhuǎn) Map方法

    ; // 構(gòu)造函數(shù) 、 get 、 set } 我們假定 id 字段 是唯一的, 所以我們把 id 作為 Map 的key。 使用 Java 8 之前的方法 在使用
    的頭像 發(fā)表于 10-09 16:10 ?2122次閱讀

    Java8的新特性

    雖然目前Java最新版本都已經(jīng)到16了,但是絕大部分公司目前用的Java版本都是8,想當(dāng)初Java8問(wèn)世后,其Lambda表達(dá)式與方法引用可
    的頭像 發(fā)表于 10-10 17:12 ?709次閱讀

    JavaStream的常用知識(shí)

    ?我們都知道,傳統(tǒng)的處理中,每一步我們都需要通過(guò)循環(huán)控制,邏輯控制,解包,重新裝箱這些工作。 非生產(chǎn)線示意處理圖 這些步驟讓我們的程序的業(yè)務(wù)邏輯支離破碎,經(jīng)常處理數(shù)據(jù)類的小伙伴尤為痛苦。幸運(yùn)的是,Java8為我們引入了Stream,使用
    的頭像 發(fā)表于 10-11 15:45 ?680次閱讀
    <b class='flag-5'>Java</b>的<b class='flag-5'>Stream</b>的常用知識(shí)

    為什么需要Streams?它們能取代Java中的for循環(huán)嗎?

    Java8的發(fā)布是Java歷史上的一個(gè)重大時(shí)刻。Streams 和 Lambda 被引入,它們現(xiàn)在被廣泛使用。
    的頭像 發(fā)表于 11-03 09:39 ?1012次閱讀
    為什么需要Streams?它們能取代<b class='flag-5'>Java</b>中的for循環(huán)嗎?
    主站蜘蛛池模板: 贺州市| 师宗县| 龙川县| 宾川县| 静安区| 疏勒县| 南京市| 绵竹市| 巴彦淖尔市| 镇远县| 唐山市| 无为县| 天峻县| 博客| 临江市| 南靖县| 卢氏县| 双峰县| 罗江县| 招远市| 郓城县| 英山县| 若尔盖县| 吐鲁番市| 大名县| 舞钢市| 安庆市| 五常市| 阿合奇县| 大化| 绥德县| 三穗县| 卫辉市| 邢台市| 眉山市| 长垣县| 顺义区| 阿拉尔市| 左贡县| 驻马店市| 镇赉县|