<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
需求:
按照要求集合建立和遍歷
建立一個結合,儲存多個字串元素
把集合中所有以"張"開頭的元素儲存到一個新的集合
把"張"開頭的集合中的長度為3的元素儲存到一個新的集合
遍歷上一步得到集合
原始方式範例程式碼:
public class StreamDemo { public static void main(String[] args) { //建立一個集合,儲存多個字串元素 ArrayList<String> list = new ArrayList<String>(); list.add("心如音"); list.add("流老蛋"); list.add("王值"); list.add("李爾"); list.add("張新敏"); list.add("張天坤"); //把集合中所有以"張"開頭的元素儲存到一個新的集合 ArrayList<String> zhangList = new ArrayList<String>(); for(String s : list) { if(s.startsWith("張")) { zhangList.add(s); } } // System.out.println(zhangList); //把"張"開頭的集合中的長度為3的元素儲存到一個新的集合 ArrayList<String> threeList = new ArrayList<String>(); for(String s : zhangList) { if(s.length() == 3) { threeList.add(s); } } // System.out.println(threeList); //遍歷上一步得到的集合 for(String s : threeList) { System.out.println(s); } System.out.println("--------"); //Stream流來改進 // list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s)); list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(System.out::println); } }
使用Stream流範例程式碼:
public class StreamDemo { public static void main(String[] args) { //建立一個集合,儲存多個字串元素 ArrayList<String> list = new ArrayList<String>(); list.add("心如音"); list.add("流老蛋"); list.add("王值"); list.add("李爾"); list.add("張新敏"); list.add("張天坤"); //Stream流來改進 list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(System.out::println); } }
生成Stream流的方式:
Collection體系集合
使用預設方法stream()生成流,default Stream stream()
Map體系集合
把Map轉成Set集合,間接生成流
陣列
通過Stream介面的靜態方法of(T...values)生成流
程式碼演示:
public class StreamDemo { public static void main(String[] args) { //Collection體系的集合可以使用預設方法stream()生成流 List<String> list = new ArrayList<String>(); Stream<String> listStream = list.stream(); Set<String> set = new HashSet<String>(); Stream<String> setStream = set.stream(); //Map體系的集合間接的生成流 Map<String,Integer> map = new HashMap<String, Integer>(); Stream<String> keyStream = map.keySet().stream(); Stream<Integer> valueStream = map.values().stream(); Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream(); //陣列可以通過Stream介面的靜態方法of(T... values)生成流 String[] strArray = {"hello","world","java"}; Stream<String> strArrayStream = Stream.of(strArray); Stream<String> strArrayStream2 = Stream.of("hello", "world", "java"); Stream<Integer> intStream = Stream.of(10, 20, 30); } }
概念:
中間操作的意思是,執行完成此方法之後,Stream流依然可以繼續執行其他操作
常見方法:
方法名 | 說明 |
---|---|
Stream fifilter(Predicate predicate) | 用於對流中的資料進行過濾 |
Stream limit(long maxSize) | 返回此流中的元素組成的流,擷取前指定引數個數的資料 |
Stream skip(long n) | 跳過指定引數個數的資料,返回由該流的剩餘元素組成的流 |
static Stream concat(Stream a, Stream b) | 合併a和b兩個流為一個流 |
Stream distinct() | 返回由該流的不同元素(根據Object.equals(Object) )組成的流 |
Stream sorted() | 返回由此流的元素組成的流,根據自然順序排序 |
Stream sorted(Comparator comparator) | 返回由該流的元素組成的流,根據提供的Comparator進行排序 |
Stream map(Function mapper) | 返回由給定函數應用於此流的元素的結果組成的流 |
IntStream mapToInt(ToIntFunction mapper) | 返回一個IntStream其中包含將給定函數應用於此流的元素的結果 |
public class StreamDemo01 { public static void main(String[] args) { //建立一個集合,儲存多個字串元素 ArrayList<String> list = new ArrayList<String>(); list.add("心如音"); list.add("流老蛋"); list.add("王值"); list.add("李爾"); list.add("張新敏"); list.add("張天坤"); //需求1:把list集合中以張開頭的元素在控制檯輸出 list.stream().filter(s -> s.startsWith("張")).forEach(System.out::println); System.out.println("--------"); //需求2:把list集合中長度為3的元素在控制檯輸出 list.stream().filter(s -> s.length() == 3).forEach(System.out::println); System.out.println("--------"); //需求3:把list集合中以張開頭的,長度為3的元素在控制檯輸出 list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(System.out::println); } }
public class StreamDemo02 { public static void main(String[] args) { //建立一個集合,儲存多個字串元素 ArrayList<String> list = new ArrayList<String>(); list.add("心如音"); list.add("流老蛋"); list.add("王值"); list.add("李爾"); list.add("張新敏"); list.add("張天坤"); //需求1:取前3個資料在控制檯輸出 list.stream().limit(3).forEach(System.out::println); System.out.println("--------"); //需求2:跳過3個元素,把剩下的元素在控制檯輸出 list.stream().skip(3).forEach(System.out::println); System.out.println("--------"); //需求3:跳過2個元素,把剩下的元素中前2個在控制檯輸出 list.stream().skip(2).limit(2).forEach(System.out::println); } }
public class StreamDemo03 { public static void main(String[] args) { //建立一個集合,儲存多個字串元素 ArrayList<String> list = new ArrayList<String>(); list.add("心如音"); list.add("流老蛋"); list.add("王值"); list.add("李爾"); list.add("張新敏"); list.add("張天坤"); //需求1:取前4個資料組成一個流 Stream<String> s1 = list.stream().limit(4); //需求2:跳過2個資料組成一個流 Stream<String> s2 = list.stream().skip(2); //需求3:合併需求1和需求2得到的流,並把結果在控制檯輸出 Stream.concat(s1,s2).forEach(System.out::println); //需求4:合併需求1和需求2得到的流,並把結果在控制檯輸出,要求字串元素不能重複 Stream.concat(s1,s2).distinct().forEach(System.out::println); } }
public class StreamDemo04 { public static void main(String[] args) { //建立一個集合,儲存多個字串元素 ArrayList<String> list = new ArrayList<String>(); list.add("linqingxia"); list.add("zhangmanyu"); list.add("wangzuxian"); list.add("liuyan"); list.add("zhangmin"); list.add("zhangwuji"); //需求1:按照字母順序把資料在控制檯輸出 list.stream().sorted().forEach(System.out::println); //需求2:按照字串長度把資料在控制檯輸出 list.stream().sorted((s1,s2) -> { int num = s1.length()-s2.length(); int num2 = num==0?s1.compareTo(s2):num; return num2; }).forEach(System.out::println); } }
public class StreamDemo05 { public static void main(String[] args) { //建立一個集合,儲存多個字串元素 ArrayList<String> list = new ArrayList<String>(); list.add("10"); list.add("20"); list.add("30"); list.add("40"); list.add("50"); //需求:將集合中的字串資料轉換為整數之後在控制檯輸出 list.stream().map(s -> Integer.parseInt(s)).forEach(System.out::println); list.stream().map(Integer::parseInt).forEach(System.out::println); list.stream().mapToInt(Integer::parseInt).forEach(System.out::println); //int sum() 返回此流中元素的總和 int result = list.stream().mapToInt(Integer::parseInt).sum(); System.out.println(result); } }
到此這篇關於Java Stream流的常見生成和操作方法總結的文章就介紹到這了,更多相關Java Stream流內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45