关于JavaStream的一些小练习
一、導讀
本文著重講解java8的Stream的一些基本操作map,filter,sorted,collect
好文章 記得 收藏+點贊+關注 !!!
二、什么是stream
Stream(流)是一個來自數據源的元素隊列并支持聚合操作
- 元素是特定類型的對象,形成一個隊列。 Java中的Stream并不會存儲元素,而是按需計算。
- 數據源 流的來源。 可以是集合,數組,I/O channel, 產生器generator 等。
- 聚合操作 類似SQL語句一樣的操作, 比如filter, map, reduce, find, match, sorted等。
和以前的Collection操作不同, Stream操作還有兩個基礎的特征:
三、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的一些小练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端面试超全整理3(webpack性能优
- 下一篇: pandas.core.base.Spe