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

执行速度对比截图

 

 

                 天空没有痕迹

                风雨已在心中

 

 

 

posted @   涛姐涛哥  阅读(476)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示