日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

关于JavaStream的一些小练习

發布時間:2023/12/29 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于JavaStream的一些小练习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、導讀

本文著重講解java8的Stream的一些基本操作map,filter,sorted,collect

好文章 記得 收藏+點贊+關注 !!!

二、什么是stream

Stream(流)是一個來自數據源的元素隊列并支持聚合操作

  • 元素是特定類型的對象,形成一個隊列。 Java中的Stream并不會存儲元素,而是按需計算。
  • 數據源 流的來源。 可以是集合,數組,I/O channel, 產生器generator 等。
  • 聚合操作 類似SQL語句一樣的操作, 比如filter, map, reduce, find, match, sorted等。

和以前的Collection操作不同, Stream操作還有兩個基礎的特征:

  • Pipelining: 中間操作都會返回流對象本身。 這樣多個操作可以串聯成一個管道, 如同流式風格(fluent style)。 這樣做可以對操作進行優化, 比如延遲執行(laziness)和短路( short-circuiting)。
  • 內部迭代: 以前對集合遍歷都是通過Iterator或者For-Each的方式, 顯式的在集合外部進行迭代, 這叫做外部迭代。 Stream提供了內部迭代的方式, 通過訪問者模式(Visitor)實現。
  • 三、stream的一些小練習

    import com.gf.pojo.User;import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.stream.Collectors;/*** 練習使用串行流,并行流** @author JiaMing* @since 2021/12/7/0007 下午 14:14**/public class StreamTest {public static void main(String[] args) {//創建個定長的listList<String> strings = Arrays.asList("jiaMing", "haha", "", "hello", "world");//過濾掉空字符串List<String> list = strings.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList());//for each遍歷集合list.forEach(System.out::println);System.out.println("----------------------");//for each遍歷生成的10個隨機數Random random = new Random();random.ints().limit(10).forEach(System.out::println);System.out.println("----------------------");//使用Filter計算空字符串個數long count = list.stream().filter(String::isEmpty).count();System.out.println(count + "個");System.out.println("----------------------");//limit 獲取指定數量的流list.stream().filter(s -> !s.isEmpty()).limit(2).forEach(System.out::println);System.out.println("----------------------");//sorted對流進行排序。對輸出的 10 個隨機數進行排序random.ints().limit(10).sorted().forEach(System.out::println);System.out.println("----------------------");//map用于映射每個元素到對應的結果,使用 map 輸出了元素對應的平方數ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(4);arrayList.stream().map(integer -> integer * integer).distinct().forEach(System.out::println);System.out.println("----------------------");//使用stream提取List對象的某一列值,定義一個user類,創建幾個userList<User> users = new ArrayList<>();users.add(new User(1, "佳明", "123456", "上海"));users.add(new User(2, "張偉", "1234567", "帝都"));users.add(new User(3, "葉若雪", "12342567", "花城"));List<String> collect = users.stream().map(User::getUsername).distinct().collect(Collectors.toList());collect.forEach(System.out::println);} }


    注意:

    使用Arrays.asList將數組轉成集合時,當你向這個List添加或刪除一個元素時(例如 list.add(“hello”);)程序就會拋出異常(java.lang.UnsupportedOperationException)

    原因如下:
    當你看到這段代碼時可能覺得沒有問題,不就是返回了一個ArrayList對象嗎?問題就出在這里。
    這個ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList
    它是Arrays類自己定義的一個靜態內部類,這個內部類沒有實現add()、remove()方法,而是直接使用它的父類AbstractList的相應方法。
    而AbstractList中的add()和remove()是直接拋出java.lang.UnsupportedOperationException異常的!

    如果你想創建可變長度的list可以這樣:

    List<String> list = new ArrayList<>(); list.addAll(Arrays.asList("haha","world"));

    參考:https://www.runoob.com/java/java8-streams.html

    總結

    以上是生活随笔為你收集整理的关于JavaStream的一些小练习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。