首页 > 编程语言 >Java-14流Stream【创建一个简易for循环工具】

Java-14流Stream【创建一个简易for循环工具】

时间:2022-11-18 14:00:48浏览次数:37  
标签:Java 14 Stream int step range static result public

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,int,step,range,static,result,public
From: https://www.cnblogs.com/atwood-pan/p/16903006.html

相关文章

  • 14.DataFrame的重要属性
     #字典方式创建DataFrame对象#如果某列数据相同,写一个值就可以importpandasaspddata={'名称':['小太阳','鼠标','小刀'],'单价':[320.9,150.3,1.5],'数量':......
  • 令人头疼的Javascript隐式&强制转换
    Javascript的隐式强制只是指Javascript试图将意外的值类型强制为预期的类型。因此,您可以在需要数字的地方传递一个字符串,在需要字符串的地方传递一个对象等,它会尝试将其......
  • Springboot项目java -jar 启动jar包参数详解
    Windows1、指定端口java-jarspringboot.jar--server.port=81812、指定配置文件java-jarspringboot.jar--spring.profiles.active=dev3、同时指定端口与配置文件ja......
  • Java反射与安全问题
    1.Java反射机制Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及......
  • 【java开发系列】—— JDOM创建、修改、删除、读取XML文件
    有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。 JDOM下载地址创建XML文档XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点。......
  • Java并发中锁的种类
    锁的分类Java中锁分为以下几种:乐观锁、悲观锁共享锁、独享锁公平锁、非公平锁互斥锁、读写锁可重入、不可重入锁synchronized锁升级(无锁->偏向锁->轻量级锁......
  • Java内存马的学习总结
    1.前置知识JavaWeb三大组件ServletServlet是运行在Web服务器或应用服务器上的程序,它是作为来自HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层......
  • SpringMVC 拦截异常Exception返回Json,适合Java做后台业务项目
    publicclassExceptionHandlerimplementsHandlerExceptionResolver{@OverridepublicModelAndViewresolveException(HttpServletRequestreque......
  • gRPC(Java) keepAlive机制研究
    基于javagRPC1.24.2分析结论gRPCkeepAlive是grpc框架在应用层面连接保活的一种措施。即当grpc连接上没有业务数据时,是否发送pingpong,以保持连接活跃性,不因长时......
  • ABC149F
    ABC149F*2208题意给定一个\(n\)个节点的树,每个点的颜色\(\frac{1}{2}\)概率黑色,\(\frac{1}{2}\)概率白色,问这棵树上节点数最少的,包括所有黑色节点的连通块的白色节......