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. Linux 系统挂载 ntfs 移动硬盘无法写入的问题

    linux 下挂载 ntfs 移动硬盘无法写入问题 在机房使用移动硬盘时发现无法写入硬盘,具体是 Ubuntu 21.04 ,移动硬盘是 SSD ,分区类型是 NTFS . 首先百度得知最优办法是安装 ...

  2. 莫凡PYthon之keras 1

    莫凡PYthon 1 kearsregressionpython Regressor 回归 用神经网络去拟合数据. 主要代码 """ Regressor 回归 " ...

  3. 关于Easyui和JQuery版本兼容IE8问题记录

    1.最后支持IE8及以下版本的是JQuery1.9 2.最后支持IE8及以下的Easyui是1.3.2,其对应的是JQuery1.8 因为低版本的Easyui,缺少某些方便好用的属性方法和样式不好看, ...

  4. 对synchronized的理解和Spring为什么是单例的

    只有真正理解了Java中对象是什么,才能理解这个关键字是什么意思 字面解释 Java Guide中如此解释: synchronized 关键字解决的是多个线程之间访问资源的同步性,synchroniz ...

  5. python中列表,字典,字符串常用操作

    1. 列表操作 分类 关键字 / 函数 / 方法 说明 增加 列表.append(值) 在末尾追加值   列表.insert(索引, 值) 在指定位置插入值, 超过索引会追加值   列表.extend ...

  6. 浙大版《C语言程序设计(第3版)》题目集 练习3-3 统计学生平均成绩与及格人数 (15 分)

    练习3-3 统计学生平均成绩与及格人数 (15 分) 本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数.题目保证输入与输出均在整型范围内. 输入格式: 输入在第一行中给出非 ...

  7. bat脚本批量删除指定源码编译后的文件

    @echo off @REM 使循环内的set命令有效 setlocal enabledelayedexpansion set DIR_ROOT=%~dp0..\ for /f "delim ...

  8. 服务器性能测试工具ab

    ab指令 ab -n 1000 -c 20 http://127.0.0.1/

  9. Promise顺序执行请求;Promise一个请求执行完成再执行另一个请求

    1 函数名() { 2 new Promise(resolve => { 3 this.$rest.请求名1().then(res =>{ 4 // 请求成功后改变状态 5 resolve ...

  10. Maven中的DependencyManagement 和 Dependencies

    Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式. 通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素. 使 ...