Stream替代for-编码五分钟-划水五小时
Stream替代for-编码五分钟-划水五小时
天空没有痕迹,风雨已在心中。
背景:使用Stream 流式操作取代俄罗斯式套娃的for循环,解放底层劳动密集型码畜的双手,使编码五分钟划水五小时,不再是梦!
一、Stream替代for例子
给定一个字符串元素列表,里面有数字型字符串、有字母型字符串,字符串里有大写、小写,字符串长度也有长有短;现在要通过代码完成一个功能:
找出所有长度 >=5 的字符串、并且忽略大小写、去除重复字符串、然后按照字母排序、最后用“”连成一个字符串输出。
使用for循环实现:

package com.tjt.jvm; import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.TreeSet; public class This4String { public static void main(String[] args) {
List<String> list = Arrays.asList("5", "2", "courage", "love", "kindness", "0", "care",
"RESPECT", "courage", "99", "HONEST", "8");
// 使用Set 的去重功能定义一个具备字母排序能力的容器
Set<String> sortSet = new TreeSet<>(String::compareTo); // 按照字母排序 // for循环完成元素去重、大小写转换和长度判断:for循环1
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if (!isNum(str) && str.length() >= 5) {
// 转小写
String lowerAlpha = str.toLowerCase();
sortSet.add(lowerAlpha);
}
} StringBuffer sb = new StringBuffer();
// for循环完成连词成句:for循环1
for (String temp : sortSet) {
sb.append(temp);
sb.append("");
}
String result = sb.substring(0, sb.length() - 1);
System.out.println("result is: " + result); } /**
* 判断输入字符串是字母还是数字
*
* @param str
* @return if number return false
*/
public static Boolean isNum(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
} }
使用Stream 流实现:
package com.tjt.jvm; import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class This4For { public static void main(String[] args) {
List<String> list = Arrays.asList("5", "2", "courage", "love", "kindness", "0", "care",
"RESPECT", "courage", "99", "HONEST", "8");
Stream<String> stream = list.stream(); // list转Stream 流
String result = stream.filter(i -> !isNum(i)) // 过滤得到字母类型
.filter(i -> i.length() >= 5) // 过滤长度 >=5 的字符串
.map(i -> i.toLowerCase()) // 转小写
.distinct() // 去重
.sorted(Comparator.naturalOrder()) // 字符串排序
.collect(Collectors.joining("")); // 连接
System.out.println(result); } /**
* 判断输入字符串是字母还是数字
*
* @param str
* @return
*/
public static Boolean isNum(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
} }
最后在执行速度上也没什么擦别,简单测试了一哈~截图为证~74ms
执行速度对比截图

天空没有痕迹
风雨已在心中
Stream替代for-编码五分钟-划水五小时的更多相关文章
- 《sed的流艺术之一》-linux命令五分钟系列之二十一
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- Org-mode五分钟教程ZZZ
Table of Contents 1 源起 2 简介 2.1 获取 org-mode 2.2 安装 3 基础用法 3.1 创建一个新文件 3.2 简单的任务列表 3.3 使用标题组织一篇文章 3.4 ...
- 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)
相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...
- 转帖:用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树 这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托 ...
- 《sort帮你排序》-linux命令五分钟系列之二十六
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之四》-linux命令五分钟系列之二十四
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之三》-linux命令五分钟系列之二十三
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
随机推荐
- php日志监控
<?php date_default_timezone_set('Asia/Shanghai'); $time = date('Y-m-d H:i:s',time()); //访问时间 $ip ...
- Parrot os KDE还是MATE版本
在经历了KDE桌面痛苦折磨后,准备转投MATE的怀抱,不得不说Parrot KDE的ram的占有和windows 10差不多,大量的图形化处理,让我本来不多的内存更加血上加霜. 所以,关于版本的推荐, ...
- CSS3新增伪类有那些?
p:first-of-type 选择属于其父元素的首个元素 p:last-of-type 选择属于其父元素的最后元素 p:only-of-type 选择属于其父元素唯一的元素 p:only-child ...
- Java实现 LeetCode 384 打乱数组
384. 打乱数组 打乱一个没有重复元素的数组. 示例: // 以数字集合 1, 2 和 3 初始化数组. int[] nums = {1,2,3}; Solution solution = new ...
- Java实现 LeetCode 123 买卖股票的最佳时机 III(三)
123. 买卖股票的最佳时机 III 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与 ...
- Java实现第九届蓝桥杯第几个幸运数字
第几个幸运数字 题目描述 到x星球旅行的游客都被发给一个整数,作为游客编号. x星的国王有个怪癖,他只喜欢数字3,5和7. 国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品. 我们来 ...
- Python基础语法之“print()”函数
print()函数是Python入门的第一个必学知识点,它经常被用来调试已写的代码,检验效果,今天小老鼠就带你盘点一下print()函数在Python中如何使用. print()函数的工作流程是这样的 ...
- (一)SQL注入漏洞测试的方式总结
一.工具注入 1.SQLMap的作用 判断可注入的参数 判断可以用那种SQL注入技术来注入 识别出哪种数据库 根据用户选择,读取哪些数据(库.表.列.字段值...) 2.注入技术 [A]基于布尔的盲注 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- STM32的8*8点阵屏开发(小项目)
基础认识 实现效果 项目实现STM32点阵屏的操作,自动更改显示内容和串口控制显示内容 STM32上电后: 1) 程序将进行行和列的刷新 2) 自动递增显示0-9变化 3) 进行矩形由内向 ...