最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java8?StreamAPI中的map()方法

 更新時間:2023年04月07日 08:45:22   作者:Java技術(shù)指北  
Stream?API?是Java8中新加入的功能,這篇文章主要帶大家了解一下?Stream?API?中的?map()?方法的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

Stream API 是Java8中新加入的功能,現(xiàn)在都 Java20 了,不會還有人沒用過吧?

今天給大家演示一下 Stream API 中的 map() 方法。

前言

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

概述

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

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

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

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

示例

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

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

再創(chuàng)建一個初始化數(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("二年級");
????????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("大運");
????????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 進行了打印,看下結(jié)果

可以看到剛好把所有的學(xué)生姓名均打印出來了。如果想把這些學(xué)生姓名放到一個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);
????}
}

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

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

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

將姓名為“湯霖”的語文成績置為90

現(xiàn)在有這樣一個需求,要把姓名為湯霖學(xué)生的語文成績置為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é)果中可以看出,湯霖的語文成績的確被改為了90,這點是沒錯的。再看原數(shù)據(jù)也被改為了90,上面提到過 map() 方法生成的是一個新流,原始流中的數(shù)據(jù)也被修改了,因為下面這行代碼是在原始流中元素的基礎(chǔ)上修改的引用類型中的數(shù)據(jù),導(dǎo)致的原始流中的數(shù)據(jù)也會改。

總結(jié)

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

到此這篇關(guān)于詳解Java8 StreamAPI中的map()方法的文章就介紹到這了,更多相關(guān)Java8 StreamAPI map內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot+mybatis+redis 二級緩存問題實例詳解

    springboot+mybatis+redis 二級緩存問題實例詳解

    Mybatis默認(rèn)沒有開啟二級緩存,需要在全局配置(mybatis-config.xml)中開啟二級緩存。本文講述的是使用Redis作為緩存,與springboot、mybatis進行集成的方法。需要的朋友參考下吧
    2017-12-12
  • IDEA入門級使用教程你居然還在用eclipse?

    IDEA入門級使用教程你居然還在用eclipse?

    上個月,idea的使用量超越eclipse的消息席卷了整個IT界,idea到底好在哪里呢?下面小編通過本文給大家詳細介紹下IDEA入門級使用教程,非常詳細,感興趣的朋友一起看看吧
    2020-10-10
  • java SpringSecurity使用詳解

    java SpringSecurity使用詳解

    這篇文章主要介紹了java中Spring Security的實例詳解的相關(guān)資料,spring security是一個多方面的安全認(rèn)證框架,提供了基于JavaEE規(guī)范的完整的安全認(rèn)證解決方案,需要的朋友可以參考下
    2021-08-08
  • Java基礎(chǔ)教程之List集合的常用方法

    Java基礎(chǔ)教程之List集合的常用方法

    這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之List集合的常用方法,在Java編程中List集合是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲一組元素,有時候我們需要對List集合中的元素進行分組操作,即將相同屬性或特征的元素歸類到一組,需要的朋友可以參考下
    2023-10-10
  • java之抽象類和繼承抽象類解讀

    java之抽象類和繼承抽象類解讀

    這篇文章主要介紹了java之抽象類和繼承抽象類,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Tomcat安裝配置及Eclipse配置詳解

    Tomcat安裝配置及Eclipse配置詳解

    給大家介紹一下Tomcat安裝配置及Eclipse配置的全部圖文過程,如果你對這個還有不明白,一起跟著小編學(xué)習(xí)下。
    2017-11-11
  • .idea文件夾里面iml文件的作用及說明

    .idea文件夾里面iml文件的作用及說明

    這篇文章主要介紹了.idea文件夾里面iml文件的作用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java中新建一個文件、目錄及路徑操作實例

    Java中新建一個文件、目錄及路徑操作實例

    這篇文章主要給大家介紹了關(guān)于Java中新建一個文件、目錄及路徑操作的相關(guān)資料,新建文件、目錄及路徑是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的一個需求,本文通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Maven項目更換本地倉庫過程圖解

    Maven項目更換本地倉庫過程圖解

    這篇文章主要介紹了Maven項目更換本地倉庫過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Spring boot 添加jsp支持配置詳解

    Spring boot 添加jsp支持配置詳解

    本篇文章主要介紹了Spring boot 添加jsp支持配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

略阳县| 买车| 苏州市| 盐边县| 乡城县| 寻乌县| 台湾省| 通州区| 郧西县| 南昌市| 咸阳市| 神木县| 新安县| 晋江市| 翁牛特旗| 衡阳县| 永康市| 乌海市| 绵竹市| 阳信县| 达州市| 东明县| 伽师县| 塘沽区| 资兴市| 永康市| 田林县| 镇原县| 广丰县| 弥渡县| 宝应县| 汤阴县| 秀山| 西乌珠穆沁旗| 河西区| 霍邱县| 读书| 敦化市| 上栗县| 巨鹿县| 航空|