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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记录一下,laravel collection和 java stream 的用法和区别

發布時間:2024/1/1 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录一下,laravel collection和 java stream 的用法和区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • Stream 簡介
      • 定義
      • 三個步驟
      • 特性
      • 性能?
      • 一段代碼的思考
    • Laravel collection 常用方法 -> Java
      • all()
      • avg() average() max() min()
      • contains()
      • diff()
      • filter() intersect() where() whereIn()
      • first()
      • groupBy()
      • isEmpty() isNotEmpty()
      • keyBy()
      • map()
      • pluck() transform()
      • unique()
    • 參考資料:

Stream 簡介

定義

Stream 是 Java8 中處理集合的關鍵抽象概念,它可以指定你希望對集合進行的操作,可以執行非常復雜的查找、過濾和映射數據等操作。使用 Stream API 對集合數據進行操作,就類似于使用 SQL 執行的數據庫查詢。也可以使用 Stream API 來并行執行操作。簡而言之,Stream API提供了一種高效且易于使用的處理數據的方式。

三個步驟

創建->中間操作->中止操作

中間操作

  • 篩選與切片(比如:filter-篩選,limit-切片)
  • 映射(比如:map)
  • 排序(比如:sorted)

中止操作

  • 查找與匹配(比如:findFirst)
  • 歸約 (比如:reduce)
  • 收集 (比如collect(Collector c))

特性

  • 無存儲。stream不是一種數據結構,它只是某種數據源的一個視圖,數據源可以是一個數組,Java容器或I/O channel等。
  • 為函數式編程而生。對stream的任何修改都不會修改背后的數據源,比如對stream執行過濾操作并不會刪除被過濾的元素,而是會產生一個不包含被過濾元素的新stream。
  • 惰式執行。stream上的操作并不會立即執行,只有等到用戶真正需要結果的時候才會執行。
  • 可消費性。stream只能被“消費”一次,一旦遍歷過就會失效,就像容器的迭代器那樣,想要再次遍歷必須重新生成。

性能?

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gFPQeozi-1596436433091)(http://doc.oss.yunsom.cn/storage/2020/07-30/ZHr1sJu7qnLxeLozS06iA2xs1yi6no9WgZypHXle.jpeg “size:800,1000”)]
總結如下:

  • 對于簡單操作,比如最簡單的遍歷,Stream串行API性能明顯差于顯示迭代,但并行的Stream API能夠發揮多核特性。
  • 對于復雜操作,Stream串行API性能可以和手動實現的效果匹敵,在并行執行時Stream API效果遠超手動實現。
    所以,如果出于性能考慮1、對于簡單操作推薦使用外部迭代手動實現 2、對于復雜操作,推薦使用Stream API 3、在多核情況下,推薦使用并行Stream API來發揮多核優勢, 4、單核情況下不建議使用并行Stream API。
  • 如果出于代碼簡潔性考慮,使用Stream API能夠寫出更短的代碼。即使是從性能方面說,盡可能的使用Stream API也另外一個優勢,那就是只要Java Stream類庫做了升級優化,代碼不用做任何修改就能享受到升級帶來的好處。<

一段代碼的思考

Stream.of(1,2,3,4,5,6,7,8).sequential().filter(i -> {System.out.println("過濾掉小于2的數據,數據項" + i);return i > 2;}).distinct().map(i -> {System.out.println("給數據加五" + i);return i + 5;}).collect(Collectors.toList());Stream.of(1,2,3,4,5,6,7,8).parallel().filter(i -> {System.out.println("過濾掉小于2的數據,數據項" + i);return i > 2;}).distinct().map(i -> {System.out.println("給數據加五" + i);return i + 5;}).collect(Collectors.toList());

Laravel collection 常用方法 -> Java

all()

all 方法返回該集合表示的底層數組

collect([1,3,5])->all(); Arrays.asList(1,3,5).stream().collect(Collectors.toList());

avg() average() max() min()

avg 方法返回給定的 平均值

collect([1,3,5])->avg(); Arrays.asList(1,3,5).stream().mapToInt(Integer::intValue).average()

contains()

contains 方法判斷集合是否包含給定的項目

collect([1,3,5])->contains(1); // true Arrays.asList(1,3,5).contains(1)

diff()

diff 方法將集合與其它集合或純 PHP 數組進行值的比較,然后返回原集合中存在而給定集合中不存在的值

$collection = collect([1, 2, 3, 4, 5]);$diff = $collection->diff([2, 4, 6, 8]);$diff->all(); // [1, 3, 5] List<Integer> collection = Arrays.asList(1, 2, 3, 4, 5);// ArraysList 才支持 removeAllList<Integer> diff = new ArrayList<>(collection);diff.removeAll(Arrays.asList(2, 4, 6, 8));

filter() intersect() where() whereIn()

filter 方法使用給定的回調函數過濾集合的內容,只留下那些通過給定真實測試的內容

$collection = collect([1, 2, 3, 4]);$filtered = $collection->filter(function ($value, $key) {return $value > 2; });$filtered->all();// [3, 4] List<Integer> collection = Arrays.asList(1, 2, 3, 4);List<Integer> filtered = collection.stream().filter(p -> p > 2).collect(Collectors.toList());

first()

first 方法返回集合中通過給定真實測試的第一個元素

collect([1, 2, 3, 4])->first(function ($value, $key) {return $value > 2; });// 3 Optional<Integer> first = Arrays.asList(1, 2, 3, 4).stream().filter(p -> p > 2).findFirst();if (first.isPresent()) {System.out.println(first.get());}

groupBy()

groupBy 方法根據給定的鍵對集合內的項目進行分組

$collection = collect([['account_id' => 'account-x10', 'product' => 'Chair'],['account_id' => 'account-x10', 'product' => 'Bookcase'],['account_id' => 'account-x11', 'product' => 'Desk'], ]);$grouped = $collection->groupBy('account_id');$grouped->toArray();/*['account-x10' => [['account_id' => 'account-x10', 'product' => 'Chair'],['account_id' => 'account-x10', 'product' => 'Bookcase'],],'account-x11' => [['account_id' => 'account-x11', 'product' => 'Desk'],],] */ @Data@AllArgsConstructorclass Product {private String accountId;private String product;}List<Product> collection = Arrays.asList(new Product("account-x10", "Chair"),new Product("account-x10", "Bookcase"),new Product("account-x11", "Desc"));Map<String, List<Product>> grouped = collection.stream().collect(Collectors.groupingBy(Product::getAccountId));

isEmpty() isNotEmpty()

如果集合是空的,isEmpty 方法返回 true,否則返回 false

collect([])->isEmpty();// true CollectionUtils.isEmpty(null);

keyBy()

keyBy 方法以給定的鍵作為集合的鍵。如果多個項目具有相同的鍵, 則只有最后一個項目回顯示在新集合中

$collection = collect([['product_id' => 'prod-100', 'name' => 'Desk'],['product_id' => 'prod-200', 'name' => 'Chair'], ]);$keyed = $collection->keyBy('product_id');$keyed->all();/*['prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],] */ @Data@AllArgsConstructorclass Product {private String accountId;private String product;}List<Product> collection = Arrays.asList(new Product("account-x10", "Chair"),new Product("account-x10", "Bookcase"),new Product("account-x11", "Desc"));Map<String, Product> keyed = collection.stream().collect(Collectors.toMap(Product::getAccountId, p->p, (exist, replace) -> (replace)));

map()

map 方法遍歷集合并將每一個值傳入給定的回調方法。該回調可以任意修改項目并返回,從而形成新的被修改過項目的集合:

$collection = collect([1, 2, 3, 4, 5]);$multiplied = $collection->map(function ($item, $key) {return $item * 2; });$multiplied->all();// [2, 4, 6, 8, 10] List<Integer> collection = Arrays.asList(1, 2, 3, 4, 5);List<Integer> multiplied = collection.stream().map(p -> p * 2).collect(Collectors.toList());

pluck() transform()

pluck 方法可以獲取集合中給定鍵對應的所有值:

$collection = collect([['product_id' => 'prod-100', 'name' => 'Desk'],['product_id' => 'prod-200', 'name' => 'Chair'], ]);$plucked = $collection->pluck('name');$plucked->all();// ['Desk', 'Chair'] @Data@AllArgsConstructorclass Product {private String accountId;private String product;}List<Product> collection = Arrays.asList(new Product("account-x10", "Chair"),new Product("account-x10", "Bookcase"),new Product("account-x11", "Desc"));List<String> plucked = collection.stream().map(Product::getAccountId).collect(Collectors.toList());

unique()

unique 方法返回集合中所有唯一的項目。返回的集合保留著原數組的鍵,所以在這個例子中,我們使用 values 方法來把鍵重置為連續編號的索引:

$collection = collect([1, 1, 2, 2, 3, 4, 2]);$unique = $collection->unique();$unique->values()->all();// [1, 2, 3, 4] List<Integer> unique = Arrays.asList(1, 2,2, 3, 4, 5) .stream().distinct().collect(Collectors.toList());

參考資料:

  • https://blog.csdn.net/weixin_37948888/article/details/96995312
  • https://learnku.com/docs/laravel/5.7/collections/2279
  • https://zhuanlan.zhihu.com/p/92419004
  • http://doc.oss.yunsom.cn/project/41?p=927

總結

以上是生活随笔為你收集整理的记录一下,laravel collection和 java stream 的用法和区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久综合九九 | mm131亚洲精品 | 日韩另类av | 韩国伦理在线视频 | 成人性生交大片免费卡看 | 美女被出白浆 | 男人天堂手机在线 | 都市激情 自拍偷拍 | 97人妻人人揉人人躁人人 | 亚洲综合小说 | 免费在线观看www | 国产亚洲精品久久久久久久久动漫 | 黄频在线观看 | ,国产精品国产三级国产 | 最近的中文字幕在线看视频 | www.日韩.com| 午夜人体视频 | 成人精品视频一区 | 国产农村妇女精品一区二区 | 自拍偷拍色综合 | 日韩av免费 | 天天操女人 | 中文字幕在线观看国产 | 女人叫床很黄很污句子 | 欧美一二三视频 | 91精品久久久久久久 | 性无码专区无码 | 蜜臀av一区二区三区激情综合 | 久久精品视 | 狠狠操一区 | 中文字幕第二区 | 男女做那个的全过程 | 亚洲一区二区在线播放 | 日本在线播放视频 | 黄色毛毛片 | av有声小说一区二区三区 | 日韩有码中文字幕在线 | 欧美性生活 | 鲍鱼av在线| 免费毛片观看 | 性欧美video另类hd尤物 | 亚洲а∨天堂久久精品2021 | 欧美一区日韩一区 | 小视频在线播放 | jizzjizz免费| 午夜精品久久久久久久久久久 | 欧美性猛交xxxx黑人猛交 | 国产精品亚洲天堂 | 久久久久久久影视 | 亚洲五十路 | av资源在线播放 | 日韩二区三区四区 | 天天影视色 | 国产剧情久久 | 激情网av | 亚洲美免无码中文字幕在线 | 蜜桃视频在线网站 | 欧美色噜噜 | xxxxxx日本 | 少妇激情四射 | 国产无精乱码一区二区三区 | 香蕉视频一级片 | av不卡高清 | 亚洲av成人精品一区二区三区在线播放 | 久久国产激情视频 | 亚洲国产97 | 青青草娱乐在线 | 热99视频 | 日本高清xxx| 91天堂网| 黄瓜视频在线免费观看 | 日韩mv欧美mv国产网站 | 国产亚洲色婷婷久久99精品91 | 大奶一区| 色综合图区 | 夜夜干夜夜 | 日韩视频第一页 | 日日碰日日摸 | 朋友人妻少妇精品系列 | 免费av软件 | 国产伊人自拍 | 久久久久久国产免费a片 | 亚洲蜜桃精久久久久久久久久久久 | 蜜臀久久久久久999 大陆熟妇丰满多毛xxxⅹ | 色呦呦视频在线观看 | 亚洲成人日韩 | 91亚洲精品久久久蜜桃借种 | 国产成人亚洲精品自产在线 | 中文字幕人妻丝袜乱一区三区 | 国内激情 | 色av吧| 亚洲中文字幕在线一区 | 美女日日日 | 欧美性大战久久久久久久蜜桃 | 一区二区三区四区国产 | 午夜精品三级久久久有码 | jlzzjizz在线播放观看 | 五月婷婷综合激情 | 国产污视频在线观看 |