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循环工具】的更多相关文章

  1. 如何使用Java AWT 创建一个简易计算器

    摘要:手把手教你使用 Java AWT 创建一个简易计算器. 本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工 ...

  2. 依赖注入[5]: 创建一个简易版的DI框架[下篇]

    为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...

  3. 依赖注入[4]: 创建一个简易版的DI框架[上篇]

    本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章(<控制反转>.<基于IoC的设计模式>和< 依赖注入模式>)从纯理论的角度 ...

  4. .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]

    原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...

  5. 使用Python创建一个简易的Web Server

    Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...

  6. 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM

    题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...

  7. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  8. jquery+flask+keras+nsfw快速搭建一个简易鉴黄工具

    1. demo 地址:http://www.huchengchun.com:8127/porn_classification 接口说明: 1. http://www.huchengchun.com:8 ...

  9. Java中通过方法创建一个http连接并请求(服务器间进行通信)

    服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值. 1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package dem ...

  10. java游戏开发杂谈 - 创建一个窗体

    package game1; import javax.swing.JFrame; /** * java游戏开发杂谈 * ---demo1:创建一个窗体 * * @author 台哥 * @date ...

随机推荐

  1. 在控制台中输入msqyl一直报ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost'错误

    错误: 在绿色Mysql的bin文件下打开cmd,输入mysql,一直报ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' ...

  2. MySQL日期/时间函数

    1.查询当前时间函数: select NOW(),LOCALTIME(),SYSDATE(),CURRENT_TIMESTAMP(); 但是now()与sysdate()有点差异的,一个语句中now( ...

  3. 记一次p标签内容不换行记录

    p标签内容l里面如果全部是英文,那么默认是不会换行的. 需要添加word-wrap: break-word; 属性 这样就会自动换行了

  4. flutter TextField 使用prefixIcon图标和文字间距问题

    可以看到使用prefixIcon图标就出现间距问题.网上看了很多文章,好像是没有什么好的解决办法,也有可能是太简单了,别人懒的发(哭笑). 我把我知道的方法写出来吧 decoration: Input ...

  5. 【python】python3.7与3.9共存,两个3版本同时存在(平时用vscode敲代码)pip复制

    1.按照安装python及环境配置 - 人间寒梅 - 博客园 (cnblogs.com),将3.9装好. 2.在官网下载3.7的对应文件 3.下载后运行,并自定义下载且选中添加到path.,自己为py ...

  6. React++antd+ProComponents可编辑表格EditableProTable组件实现表单中的可编辑列表组件

    需求: 在新增&编辑表单中,共分三个表单模块,第二个模块设计为一个可编辑表格组件,其中可选下拉列表依赖外层第一个模块的某条数据值,提供新增.编辑.删除.按规定条件去重等功能,并在第三个模块中自 ...

  7. LoadRunner——block(块)技术

    一般情况下,loadrunner中的事务是统一执行的,多个事务所执行的次数是相同的,对于不同的事务执行不同的次数就要用到block(块)技术 block(块)技术主要应用于在一个脚本中实现不同事务.不 ...

  8. Mac截网页长屏的方法-谷歌浏览器

    打开chrome,左上角帮助,输入[开发者工具],回车,右边显示出一些html代码, 然后shift+command+p: 输入full,选择第一个capture full size screensh ...

  9. if (()) [[]] [] 条件表达式比较示例

    a.b的ASCII码是 097.098ASCII码 参考 http://www.51hei.com/mcu/4342.html 1. if (()) a=3; b=2 时,if (( a > b ...

  10. 第12章 使用 Entity Framework Core 保存数据(ASP.NET Core in Action, 2nd Edition)

    本章包括(请点击这里阅读其他章节) 什么是实体框架核心以及为什么应该使用它 向 ASP.NET Core 应用程序添加实体框架核心 构建数据模型并使用它创建数据库 使用实体框架核心查询.创建和更新数据 ...