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

java8新特性 stream流的方式遍歷集合和數(shù)組操作

 更新時間:2020年08月17日 10:15:22   作者:光哥_帥  
這篇文章主要介紹了java8新特性 stream流的方式遍歷集合和數(shù)組操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

前言:

在沒有接觸java8的時候,我們遍歷一個集合都是用循環(huán)的方式,從第一條數(shù)據(jù)遍歷到最后一條數(shù)據(jù),現(xiàn)在思考一個問題,為什么要使用循環(huán),因為要進(jìn)行遍歷,但是遍歷不是唯一的方式,遍歷是指每一個元素逐一進(jìn)行處理(目的),而并不是從第一個到最后一個順次處理的循環(huán),前者是目的,后者是方式。 所以為了讓遍歷的方式更加優(yōu)雅,出現(xiàn)了流(stream)!

1.流的目的在于強(qiáng)掉做什么

假設(shè)一個案例:將集合A根據(jù)條件1過濾為子集B,然后根據(jù)條件2過濾為子集C

在沒有引入流之前我們的做法可能為:

public class Demo02NormalFilter { 
    public static void main(String[] args) { 
      List<String> list = new ArrayList<>(); 
      list.add("張無忌"); 
      list.add("周芷若"); 
      list.add("趙敏"); 
      list.add("張強(qiáng)"); 
      list.add("張三豐"); 
      List<String> zhangList = new ArrayList<>(); 
      for (String name : list) { 
        if (name.startsWith("張")) { 
          zhangList.add(name); 
        } 
      } 
   
      List<String> shortList = new ArrayList<>(); 
      for (String name : zhangList) { 
        if (name.length() == 3) { 
          shortList.add(name); 
        } 
      } 
   
      for (String name : shortList) { 
        System.out.println(name); 
      } 
    } 
  } 

現(xiàn)在以流的方式實現(xiàn)同樣的功能:

   public static void main(String[] args) { 
    List<String> list = new ArrayList<>();
    list.add("張無忌");
    list.add("周芷若");
    list.add("趙敏");
    list.add("張強(qiáng)");
    list.add("張三豐");
    list.stream().filter(s->s.startsWith("張")).filter(s-> s.length() == 3).forEach(System.out::println);

從上面的兩段代碼可以看出流的存在讓代碼更加優(yōu)雅。既然是篩選那么就直接用過濾方法就好了。

2.stream的方法

2.1 延遲方法:

這個和lambda表達(dá)式的延遲加載的原理一樣,它可以進(jìn)行鏈?zhǔn)骄幊?,比?().filter().map().limit(),可以點下去,到最后一步(方法為count或者foreach)加載數(shù)據(jù)。這里主要介紹map和concat方法

1.filter,用來過濾

Stream<String> original = Stream.of("張無忌", "張三豐", "周芷若");
 Stream<String> result = original.filter(s -> s.startsWith("張"));
 result.forEach(name-> System.out.println(name));

2.map

將流中的元素映射到另一個流中,這個是在后期經(jīng)常用到的,比如方法所接收的返回值是A,但是接收的卻是B

這里舉兩個例子

例子1

將String類型的流轉(zhuǎn)換為Integer 類型

Stream<String> stringStream = Stream.of("1", "2", "3", "4", "5", "6");

stringStream.map(str->Integer.parseInt(str)).forEach(System.out::println);

例子2

方法需要返回的是List <String>,但是這里只有List<Category>,此時就要想到stream().map

  public List<String> queryNamesByIds(List<Long> ids){
    List<Category> categories = this.categoryMapper.selectByIdList(ids);
    return categories.stream().map(category -> category.getName()).collect(Collectors.toList());
  }

例子3

List<Object>轉(zhuǎn)化為List<Cart>,其中List<Object>中的Object為Cart的json對象

    //查詢購物車數(shù)據(jù)(將List<Object>變成List<Cart>)
    return carts.stream().map(o -> JsonUtils.parse(o.toString(),Cart.class)).collect(Collectors.toList());

3.contract,兩個流合并成一個流

   Stream<String> streamA = Stream.of("張無忌","張翠山");
    Stream<String> streamB = Stream.of("美羊羊","喜羊羊");
    //寫法1
    //Stream.concat(streamA, streamB).forEach(System.out::println);
    
    //寫法2
    Stream<String> result= Stream.concat(streamA, streamB);
    result.forEach(name-> System.out.println(name));

2.2 終結(jié)方法:

執(zhí)行完的結(jié)果不能在調(diào)用延遲方法。 如 ().filter().count().limit()這樣的寫法就會報錯。

cout方法與foreach方法比較簡單,這里不介紹了。

補(bǔ)充知識:JAVA Stream流的forEach遍歷

Stream流的forEach:

如果希望在流當(dāng)中進(jìn)行元素的遍歷操作,可以使用forEach方法:

forEach(Lambda)表達(dá)式,對每一個元素都要進(jìn)行操作。

參數(shù)Lambda表達(dá)式必須是一個能夠消費的一個參數(shù),而且不產(chǎn)生數(shù)據(jù)結(jié)果的Lambda

例如:

Lambda: s -> System.out.println(s);

方法引用:System::println

println其為不會產(chǎn)生返回結(jié)果的Lambda

例如:對集合中每個元素的打印輸出:

public class StreamForEach {
 public static void main(String[] args) {
 ArrayList<String> list = new ArrayList<>();
 list.add("abc");
 list.add("def");
 list.add("ghi");

 Stream<String> streamA = list.stream();

 // 對每一個元素進(jìn)行打印輸出
 streamA.forEach((String s) -> {
  System.out.println(s);
 });

 list.stream().forEach(s -> System.out.println(s));

 list.stream().forEach(System.out::println);
 }
}

以上這篇java8新特性 stream流的方式遍歷集合和數(shù)組操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中統(tǒng)一返回前端格式及統(tǒng)一結(jié)果處理返回詳解

    java中統(tǒng)一返回前端格式及統(tǒng)一結(jié)果處理返回詳解

    這篇文章主要介紹了統(tǒng)一結(jié)果處理的重要性,以及如何在SpringBoot項目中定義和使用統(tǒng)一結(jié)果返回類,通過構(gòu)造器私有化和靜態(tài)方法ok、error,提供了成功和失敗的統(tǒng)一響應(yīng)格式,需要的朋友可以參考下
    2025-02-02
  • Eclipse、MyEclipse 導(dǎo)入svn項目具體步驟

    Eclipse、MyEclipse 導(dǎo)入svn項目具體步驟

    這篇文章主要介紹了Eclipse、MyEclipse 導(dǎo)入svn項目具體步驟的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Java實現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    Java實現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    本文主要為大家詳細(xì)介紹了如何在Java項目中引用aspose-words和poi-tljar包實現(xiàn)word文檔轉(zhuǎn)成圖片,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • Java語言實現(xiàn)簡單的酒店前臺管理小功能(實例代碼)

    Java語言實現(xiàn)簡單的酒店前臺管理小功能(實例代碼)

    這篇文章主要介紹了Java語言實現(xiàn)簡單的酒店前臺管理小功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • SpringMvc定制化深入探究原理

    SpringMvc定制化深入探究原理

    SpringMVC是一種基于Java,實現(xiàn)了Web MVC設(shè)計模式,請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦,這篇文章主要介紹了SpringMvc定制化原理
    2022-10-10
  • Arthas-java程序運行時debug工具使用

    Arthas-java程序運行時debug工具使用

    這篇文章主要介紹了Arthas-java程序運行時debug工具使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Idea自定義方法注釋模板的教程詳解(去param括號、return全類名)

    Idea自定義方法注釋模板的教程詳解(去param括號、return全類名)

    這篇文章主要介紹了Idea自定義方法注釋模板(去param括號、return全類名),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot整合minio服務(wù)的示例代碼

    SpringBoot整合minio服務(wù)的示例代碼

    本文主要介紹了SpringBoot整合minio服務(wù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java RabbitMQ的三種Exchange模式

    Java RabbitMQ的三種Exchange模式

    這篇文章主要介紹了Java RabbitMQ的三種Exchange模式,分別為Direct模式、Fanout模式、Topic模式,Rabbit的Direct Exchange模式是指消息發(fā)送導(dǎo)RouteKey中指定的Queue,Direct模式可以使用Rabbit自帶的Exchange
    2022-08-08
  • Java實現(xiàn)并查集示例詳解

    Java實現(xiàn)并查集示例詳解

    這篇文章主要通過一個題目示例為大家詳細(xì)介紹Java如何實現(xiàn)并查集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

九龙坡区| 宁夏| 无锡市| 深圳市| 南和县| 奉贤区| 吉安县| 哈尔滨市| 许昌县| 台江县| 黔西县| 保靖县| 拉萨市| 承德市| 高密市| 大兴区| 大名县| 洪湖市| 金乡县| 兴宁市| 中方县| 柘荣县| 兴海县| 锦屏县| 通州区| 安远县| 南雄市| 同心县| 灌阳县| 土默特右旗| 华池县| 中山市| 汽车| 赤水市| 昭通市| 广西| 新闻| 大邑县| 湘阴县| 马龙县| 龙井市|