Java-14流Stream【创建一个简易for循环工具】
Java-14流Stream
构造简易的循环取代for
IntStream类提供了一个range()方法,可以生成一个流————由int值组成的序列
import static java.util.stream.IntStream.*;
/**
* IntStream类提供了一个range()方法,可以生成一个流————由int值组成的序列
*/
public class Ranges {
public static void main(String[] args) {
// The traditional way:
// 传统的for
int result = 0;
for (int i = 10; i < 20; i++)
result += i;
System.out.println(result);
// for-in with a range:
// 使用range函数的for
result = 0;
for (int i : range(10, 20).toArray())
result += i;
System.out.println(result);
// Use streams:
// 使用流中的sum()求和
System.out.println(range(10, 20).sum());
}
}
/* Output:
145
145
145
*/
简化循环util
那么,我们可不可以自己创造一个专门用于简化for循环的工具呢?
那是当然可以的:
第一步创建一个Range,提供了三种range()方法,类似于IntStream中的
public class Range {
// Produce sequence [start..end) incrementing by step
public static int[] range(int start, int end, int step) {
if (step == 0)
throw new
IllegalArgumentException("Step cannot be zero");
int sz = Math.max(0, step >= 0 ?
(end + step - 1 - start) / step
: (end + step + 1 - start) / step);
int[] result = new int[sz];
for (int i = 0; i < sz; i++)
result[i] = start + (i * step);
return result;
} // Produce a sequence [start..end)
public static int[] range(int start, int end) {
return range(start, end, 1);
}
// Produce a sequence [0..n)
public static int[] range(int n) {
return range(0, n);
}
}
第二步,为了取代简单的for循环,再创建一个repeat()工具函数:
/**
* TODO 取代简单的for循环 ==》 repeat() 工具函数
*/
public class Repeat {
/**
* 不带步长的循环
* @param n
* @param action
*/
public static void repeat(int n, Runnable action) {
range(0, n).forEach(i -> action.run());
}
/**
* 带有步长的循环
* @param n
* @param action
* @param step 步长
*/
public static void repeatStep(int n, Runnable action, int step) {
range(0, n).forEach(i -> action.run());
}
}
这样生成的循环可以说更简单了:
import static org.example.onjava.example14.Repeat.*;// 引入简单循环工具类
/**
* @Author Coder_Pans
* @Date 2022/11/18 13:37
* @PackageName:org.example.onjava.example14.stream
* @ClassName: Looping
* @Description: TODO 引用简单循环取代for
* @Version 1.0
*/
public class Looping {
static void hi(){
System.out.println("Hi~~~~!");
}
public static void main(String[] args) {
repeat(3, () -> System.out.println("Looping!"));
repeat(10, () -> System.out.println("Looping!"));
repeat(2, Looping::hi);
}
}
Java-14流Stream【创建一个简易for循环工具】的更多相关文章
- 如何使用Java AWT 创建一个简易计算器
摘要:手把手教你使用 Java AWT 创建一个简易计算器. 本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工 ...
- 依赖注入[5]: 创建一个简易版的DI框架[下篇]
为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...
- 依赖注入[4]: 创建一个简易版的DI框架[上篇]
本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章(<控制反转>.<基于IoC的设计模式>和< 依赖注入模式>)从纯理论的角度 ...
- .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]
原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...
- 使用Python创建一个简易的Web Server
Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...
- 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM
题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...
- 如何创建一个基于命令行工具的跨平台的 NuGet 工具包
命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...
- jquery+flask+keras+nsfw快速搭建一个简易鉴黄工具
1. demo 地址:http://www.huchengchun.com:8127/porn_classification 接口说明: 1. http://www.huchengchun.com:8 ...
- Java中通过方法创建一个http连接并请求(服务器间进行通信)
服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值. 1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package dem ...
- java游戏开发杂谈 - 创建一个窗体
package game1; import javax.swing.JFrame; /** * java游戏开发杂谈 * ---demo1:创建一个窗体 * * @author 台哥 * @date ...
随机推荐
- chrome 请停用以开发者
链接:https://pan.baidu.com/s/1YhWINGlUVyTE5XyBVIGW_Q 提取码:23t2 转载至 https://www.cnblogs.com/it-tsz/p/9 ...
- CSOL大灾变移植记录
在2019年,我玩u3d把玩了一段时间,并制作了一些Demo,其中包括FPSDemo,RPG动作游戏Demo,一些截图如下: 时间到了2020年5月底,我开始玩之前大学研究过的jMonkeyEngin ...
- 使用logback需要导入的jar包
jar包名 logback-access-1.1.2.jar logback-classic-1.1.2.jar logback-core-1.1.2.jar slf4j-api-1.7.25.jar ...
- 【STM32】细说TIM的Channels与应用
寄存器层 1.TIM_Base_Set初始化常用: CR1:TIM control reg 1 该寄存器内容决定定时器计数模式CounterMode.分频比ClockDivision和 ...
- Mardown学习
Mardown学习 标题: 一级标题:'#'+'空格'+'标题名字'+'回车' 二级标题:'##'+'空格'+'标题名字'+'回车' 三级标题:'###'+'空格'+'标题名字'+'回车' 四级标题: ...
- Esp32 arduino 编译报 hwcrypto/aes.h: No such file or directory 错误
由于hwcrypto/* 在新版中移动到了 esp32/*. 编译会出现hwcrypto/aes.h: No such file or directory 的错误 解决方案如下: arduino 中E ...
- Jndi结合DynamicDataSource实现多数据源配置
首先注意本框架是SSM,配置主要在两个地方.第一个是applicationContext.xml,第二个文件是Tomcat下面的context.xml里面 1.context.xml文件配置的代码如下 ...
- Think in UML 其二
UML基本元素 参与者 1.参与者位于系统边界之外. 思考参与者究竟是谁时,以下两个问题有助于了解 ·谁对系统有着明确的目标和要求并且主动发出动作? ·系统是为谁服务的? 2.参与者可以非人 功能性需 ...
- 阿里云下载ssl证书
"request合法域名"跟上面CA证书中申请的二级域名一致. Springboot增加证书 创建Springboot项目. 解压缩后,证书文件4375838_wechat.abc ...
- ByteArrayInputStream和ByteArrayOutputStream不需要关闭流的原理--博客摘录
---------------- 版权声明:本文为CSDN博主「PSUUGDUFNM」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://blo ...