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. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
随机推荐
- 读Pyqt4简介,带你入门Pyqt4 _001
PyQt是用来创建GUI应用程序的工具包,它把Python和成功的Qt绑定在一起,Qt库是这个星球上最强大的库之一,如果不是最强大的话. PyQt作为一组Python模块的实现.有超过300个类和超过 ...
- ftp上传html文件
在用ftp上传当个html文件时,发现html文件会被压缩成一行,在html中的单行注释将后面的代码都注释掉了,导致网页不能正常访问. 8uftp.FlashFXP.filezilla 在这三个ftp ...
- Rocket - diplomacy - TransferSizes
https://mp.weixin.qq.com/s/Sf0owQxWzxacVvykJZ5oTQ 介绍TransferSizes的实现. 1. 基本定义 从min到max的闭合 ...
- 非阻塞赋值(Non-blocking Assignment)是个伪需求(2)
https://mp.weixin.qq.com/s/5NWvdK3T2X4dtyRqtNrBbg 13hope: 个人理解,Verilog本身只是“建模”语言.具体到阻塞/非阻塞,只规定了两种赋 ...
- MD5安全吗?
MD5的破解方法目前分为两类:一类为彩虹表破解:一类为专业的MD5破解站点. 1.彩虹表 彩虹表是一个庞大的.针对各种可能的字母组合预先计算好的哈希值的集合.彩虹表不仅针对MD5算法,主流的算法都有对 ...
- 【zookeeper】安装教程文档需下载
请查看文件https://download.csdn.net/download/qq_42158942/11846847 zookeeper的作用 • ZooKeeper 是一个开源的分布式协调服务, ...
- Java 从入门到精通-反射机制
导读 Java反射机制是开发者迈向结构化开发的重要一步,同时掌握了反射机制也就掌握了所有框架的核心实现思想. 认识反射机制 简单例子 通过以上的程序就会发现,除了对象的正向处理操作之外,还可以通过ge ...
- ansible取出register变量中最长字符串
背景 在用ansible撰写一个etcd恢复的playbook时,有一个操作是获取etcd启动时的"initial-cluster"启动参数,该参数在etcd集群不同节点不一致,需 ...
- 从SpringBoot源码分析 主程序配置类加载过程
1.@Import(AutoConfigurationPackages.Registrar.class) 初始SpringBoot 我们知道在SpringBoot 启动类上有一个@SpringBoot ...
- Spring Cloud Ribbon 客户端负载均衡
Ribbon客户端组件提供一系列完善的配置选项,比如连接超时.重试.重试算法等,内置可插拔.可定制的负载均衡组件.下面是用到的一些负载均衡策略: 简单轮询负载均衡 加权轮询负载均衡 区域感知轮询负载均 ...