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. omcat启动Publishing failed with multiple errors

    新安装一个tomcat插件.启动的时候就弹错误框.但tomcat还能使用. Publishingfailedwithmultipleerrors Resource is out of sync wit ...

  2. Mysql学习:1、mysql安装及配置及连接Navicat

    1.下载地址: https://dev.mysql.com/downloads/windows/installer/8.0.html 2.安装流程: a.选自定义安装:custom. b. 在下一步的 ...

  3. Docker之基本原理介绍

    Docker 环境搭建请移步:https://i.cnblogs.com/posts/edit;postId=14090026 First:docker能做什么? 传统的环境部署: 1.环境和项目分开 ...

  4. python中json的四个方法总结dumps、dump、loads、load

    json的四个方法总结dumps.dump.loads.load dump介绍 1 json .作用:将python内置类型序列化为json对象后写入文件.参数:要存储的数据以及可以用于存储的文件对象 ...

  5. nuxt中处理跨域

    一.安装 npm install @nuxtjs/axios    @nuxtjs/proxy  -S 二.nuxt.config.js进行配置 modules:[ '@nuxtjs/axios' ' ...

  6. servlet - 从本地下载图片

    import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet. ...

  7. 每日一题_1_x^n

    函数头为double power(double x,int n).在主函数中输入x.n并调用该函数求 (函数定义在主函数后面,在调用前做函数声明) 输出x^n 1 #define _CRT_SECUR ...

  8. Spring系列之基于注解的容器配置7

    目录 基于注解的容器配置 @Required(弃用) `@Autowired` `@Primary` @Qualifier 使用泛型作为自动装配限定符 `@Resource` `@Value` 使用` ...

  9. Vuex----Actions

    Actions用于处理异步任务. 如果通过异步操作变更数据,必须通过 Action,而不能使用Mutation,但是在 Action中还是要通过触发Mutation的方式间接变更数据. 注意: 在Ac ...

  10. python更新pip报错pip._vendor.urllib3.exceptions.ProxySchemeUnknown: Not supported proxy scheme None

    更新pip报错: 看到最后一行很明显是proxy的问题,查看cmd下的代理 将代理删掉重启cmd执行命令就不会报错了