Stream替代for-編碼五分鐘-划水五小時 天空沒有痕跡,風雨已在心中。 背景:使用Stream 流式操作取代俄羅斯式套娃的for迴圈,解放底層勞動密集型碼畜的雙手,使編碼五分鐘划水五小時,不再是夢! 一、Stream替代for例子 給定一個字元串元素列表,裡面有數字型字元串、有字母型字元串,字 ...
Stream替代for-編碼五分鐘-划水五小時
天空沒有痕跡,風雨已在心中。
背景:使用Stream 流式操作取代俄羅斯式套娃的for迴圈,解放底層勞動密集型碼畜的雙手,使編碼五分鐘划水五小時,不再是夢!
一、Stream替代for例子
給定一個字元串元素列表,裡面有數字型字元串、有字母型字元串,字元串里有大寫、小寫,字元串長度也有長有短;現在要通過代碼完成一個功能:
找出所有長度 >=5 的字元串、並且忽略大小寫、去除重覆字元串、然後按照字母排序、最後用“❤”連成一個字元串輸出。
使用for迴圈實現:
1 package com.tjt.jvm;
2
3 import java.util.Arrays;
4 import java.util.List;
5 import java.util.Set;
6 import java.util.TreeSet;
7
8 public class This4String {
9
10 public static void main(String[] args) {
11 List<String> list = Arrays.asList("5", "2", "courage", "love", "kindness", "0", "care",
12 "RESPECT", "courage", "99", "HONEST", "8");
13 // 使用Set 的去重功能定義一個具備字母排序能力的容器
14 Set<String> sortSet = new TreeSet<>(String::compareTo); // 按照字母排序
15
16 // for迴圈完成元素去重、大小寫轉換和長度判斷:for迴圈1
17 for (int i = 0; i < list.size(); i++) {
18 String str = list.get(i);
19 if (!isNum(str) && str.length() >= 5) {
20 // 轉小寫
21 String lowerAlpha = str.toLowerCase();
22 sortSet.add(lowerAlpha);
23 }
24 }
25
26 StringBuffer sb = new StringBuffer();
27 // for迴圈完成連詞成句:for迴圈1
28 for (String temp : sortSet) {
29 sb.append(temp);
30 sb.append("❤");
31 }
32 String result = sb.substring(0, sb.length() - 1);
33 System.out.println("result is: " + result);
34
35 }
36
37 /**
38 * 判斷輸入字元串是字母還是數字
39 *
40 * @param str
41 * @return if number return false
42 */
43 public static Boolean isNum(String str) {
44 for (int i = 0; i < str.length(); i++) {
45 if (!Character.isDigit(str.charAt(i))) {
46 return false;
47 }
48 }
49 return true;
50 }
51
52
53 }
View Code
使用Stream 流實現:
1 package com.tjt.jvm;
2
3 import java.util.Arrays;
4 import java.util.Comparator;
5 import java.util.List;
6 import java.util.stream.Collectors;
7 import java.util.stream.Stream;
8
9 public class This4For {
10
11 public static void main(String[] args) {
12 List<String> list = Arrays.asList("5", "2", "courage", "love", "kindness", "0", "care",
13 "RESPECT", "courage", "99", "HONEST", "8");
14 Stream<String> stream = list.stream(); // list轉Stream 流
15 String result = stream.filter(i -> !isNum(i)) // 過濾得到字母類型
16 .filter(i -> i.length() >= 5) // 過濾長度 >=5 的字元串
17 .map(i -> i.toLowerCase()) // 轉小寫
18 .distinct() // 去重
19 .sorted(Comparator.naturalOrder()) // 字元串排序
20 .collect(Collectors.joining("❤")); // 連接
21 System.out.println(result);
22
23 }
24
25 /**
26 * 判斷輸入字元串是字母還是數字
27 *
28 * @param str
29 * @return
30 */
31 public static Boolean isNum(String str) {
32 for (int i = 0; i < str.length(); i++) {
33 if (!Character.isDigit(str.charAt(i))) {
34 return false;
35 }
36 }
37 return true;
38 }
39
40 }
最後在執行速度上也沒什麼擦別,簡單測試了一哈~截圖為證~74ms
執行速度對比截圖
天空沒有痕跡
風雨已在心中