Java-8-IntStream接口

02、Java 8 - IntStream,LongStream,DoubleStream 本章节我们提供一些 Java 8 中的 IntStream、LongStream 和 DoubleStream 使用范例。IntStream、LongStream 和 DoubleStream 分别表示原始 int 流、 原始 long 流 和 原始 double 流。 阅读详情

Java-8-IntStream接口

interface IntStream extends BaseStream<Integer, IntStream>

下面这段代码计算菜单的热量:



int calories = menu.stream()
.map(Dish::getCalories)
.reduce(0, Integer::sum);


这段代码有一个问题,它有一个暗含的装箱成本。每个 Integer 都必须拆箱成一个原始类型,再进行求和

要是可以直接像下面这样调用 sum 方法,岂不是很好:


int calories = menu.stream()
.map(Dish::getCalories)
.sum();

但这是不可能的。问题在于 map 方法会生成一个 Stream 。虽然流中的元素是 Integer 类型,但 Streams 接口没有定义 sum 方法

Java 8引入了三个原始类型特化流接口来解决这个问题: IntStream 、 DoubleStream 和LongStream ,分别将流中的元素特化为 int 、 long 和 double ,从而避免了暗含的装箱成本。每个接口都带来了进行常用数值归约的新方法,比如对数值流求和的 sum ,找到最大元素的 max 。此外还有在必要时再把它们转换回对象流的方法

生成流

  • IntStream of(int t)

  • IntStream of(int… values)

  • IntStream iterate(final int seed, final IntUnaryOperator f)

  • IntStream generate(IntSupplier s)

使用

public class M1 {


    public static void main(String[] args) {

        IntStream intStream1 = IntStream.of(1,2,3,4,5,6,7,8,9);

        intStream1.forEach(System.out::println);

        System.out.println("***********************************************");
        int[] d = {1,2,3,4,5,6,7,8,9};

        IntStream intStream2 = IntStream.of(d);

        intStream2.forEach(System.out::println);

        System.out.println("***********************************************");

        IntStream intStream3 = IntStream.iterate(1,x->x+3).limit(10);

        intStream3.forEach(System.out::println);

        System.out.println("***********************************************");

        IntStream intStream4 = IntStream.generate(()->100).limit(10);

        intStream4.forEach(System.out::println);
        

    }
}


转换流

  • asLongStream

  • asDoubleStream

  • toArray

使用


public class M2 {

    public static void main(String[] args) {

        IntStream intStream1 = IntStream.of(1,2,3,4,5,6,7,8,9);

        LongStream longStream1 = intStream1.asLongStream();

        longStream1.forEach(System.out::println);

        System.out.println("***********************************************");

        DoubleStream doubleStream1 = intStream1.asDoubleStream();
        
        doubleStream1.forEach(System.out::println);

          System.out.println("***********************************************");

        int[] d = IntStream.of(1,2,3,4,5,6,7,8,9).toArray();

        for (int i : d){
            System.out.println(i);
        }
        
    }
}




数据汇总


// * and is equivalent to:
// * <pre>{@code
// *     return reduce(0, Integer::sum);
// * }</pre>
    int sum();

    //  * and is equivalent to:
    //  * <pre>{@code
    //  *     return reduce(Integer::min);
    //  * }</pre>
    OptionalInt min();


//    * and is equivalent to:
//      * <pre>{@code
//      *     return reduce(Integer::max);
//      * }</pre>
    OptionalInt max();


//    * equivalent to:
//      * <pre>{@code
//      *     return mapToLong(e -> 1L).sum();
//      * }</pre>
    long count();


    OptionalDouble average();


    IntSummaryStatistics summaryStatistics();


使用
public class M1 {

    public static void main(String[] args) {


        List<Employee> employees = Employee.supply_Ems();

        IntStream intStream1 = IntStream.of(1,2,3,4,5,6,7,8,9);

        int sum = intStream1.sum();

        System.out.println(sum);

        System.out.println("---------------------------------------");

        //统计员工工资
        IntStream intStream2 = employees.stream()
                            .mapToInt(Employee::getSalary);

//        intStream2.forEach(System.out::println);

        //统计工资总数
//        int sum1  = intStream2.sum();

//        System.out.println(sum1);

        System.out.println("---------------------");
// 找出最低工资
//        OptionalInt optionalInt = intStream2.min();
//
//        System.out.println(optionalInt.getAsInt());

        System.out.println("---------------------");


        // 找出最高工资

//        OptionalInt optionalInt2 = intStream2.max();
//
//        System.out.println(optionalInt2.getAsInt());


//        long num = intStream2.count();
//// 数据个数
//        System.out.println(num);

        System.out.println("---------------------");


        // 平均工资
//        OptionalDouble d1 = intStream2.average();
//
//        System.out.println(d1.getAsDouble());

        System.out.println("---------------------");

        IntSummaryStatistics intSummaryStatistics = intStream2.summaryStatistics();

        System.out.println(intSummaryStatistics.toString());

        /*
        IntSummaryStatistics{count=30, sum=173068, min=1621, average=5768.933333, max=9000}

         */
        
    }
}


range && rangeClosed


    // * @apiNote
    //  * <p>An equivalent sequence of increasing values can be produced
    //  * sequentially using a {@code for} loop as follows:
    //  * <pre>{@code
    //  *     for (int i = startInclusive; i < endExclusive ; i++) { ... }
    //  * }</pre>
static IntStream range(int startInclusive, int endExclusive) 



//  * @apiNote
//      * <p>An equivalent sequence of increasing values can be produced
//      * sequentially using a {@code for} loop as follows:
//      * <pre>{@code
//      *     for (int i = startInclusive; i <= endInclusive ; i++) { ... }
//      * }</pre>
static IntStream rangeClosed(int startInclusive, int endInclusive)
使用

public class M1 {


    public static void main(String[] args) {


//        IntStream.range(1,100).forEach(System.out::println);

        System.out.println("----------------------------------");

//        IntStream.rangeClosed(1,100).forEach(System.out::println);

        /***************************************/

         int[] a1 = IntStream.rangeClosed(1,10)
                .map(i -> i + i)
                .toArray();

        System.out.println(Arrays.toString(a1));
        
    }
}



boxed

如果想转换回Integer流,可以使用这个方法


public class M3 {

    public static void main(String[] args) {

        int[] d1 = Data.supply();

        IntStream i1 = IntStream.of(d1);

        Stream<Integer> integerStream = i1.boxed();

        integerStream.sorted(Integer::compareTo).forEach(System.out::println);



    }
}

其它


public class M2 {

    public static void main(String[] args) {

        IntStream i1 = IntStream.of(1,1,1,2,5,8,9,55,5,5,5,8);

        i1.distinct().forEach(System.out::println);

        System.out.println("-----------------------------------");

        int[] a1 = Data.supply();

        System.out.println(Arrays.toString(a1));

        System.out.println("-----------------------------------");

        int[] sort =  IntStream.of(a1).sorted().toArray();

        System.out.println(Arrays.toString(sort));



    }
}


Java8IntStream数值流的常用操作以及与装箱和拆箱的关系 前面讲Stream的常用api的使用。在Stream中元素都是对象,那么当我们操作一个数字流的时候就要考虑拆箱和装箱。 阅读详情

相关推荐

从零开始:用Python实现AlphaZero五子棋AI(附完整代码)

本文详细介绍了如何从零开始使用Python实现AlphaZero五子棋AI。通过工程化实践,逐步构建蒙特卡洛树搜索(MCTS)、轻量化残差网络(ResNet)以及自博弈训练循环,并提供完整可运行的代码。文章旨在帮助开发者绕过复杂理论,聚焦实战,最终打造一个能够自我学习与对弈的智能体,是深度强化学习在游戏AI领域的一次完整项目实战。

weixin_29081703的博客 415

JDK8辅助学习(七):IntStream

本章节我们提供一些 Java 8 中的 IntStream、LongStream 和 DoubleStream 使用范例。IntStream、LongStream 和 DoubleStream 分别表示原始 int 流、 原始 long 流 和 原始 double 流。 这三个原始流类提供了大量的方法用于操作流中的数据,同时提供了相应的静态方法来初始化它们自己。 这三个原始流类都在 java.util.stream 命名空间下。 ...

扛麻袋的少年的博客 4700

python代码爬取大众点评评论!直接copy就可以运行!

python代码爬取大众点评评论!直接copy就可以运行!

QiuQiRuQin的博客 1万+

IntStream的用法(详解)

IntStream是一种特殊的Stream,用来提供对int类型数据进行相关的stream操作,下面我们一起来看下。

pzl1426733135的博客 4071

Vmware安装windowsServer2022版本

全网最详细的Vmware安装windowsServer2022版本

A乐神的博客 7004

[uboot] (第四章)uboot流程——uboot编译流程

uboot编译流程简单介绍

ooonebook的博客 1万+

JAVA基础 -- java8新特性一之 Stream流以及基本操作

什么是Stream: 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 注意点: 1、Stream 自己不会存储数据。 2、Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。 3、Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。 1、创建Stream @Test public void stream01() { List<Integer> integers = Arrays.as...

Make every day meaningful 711

10.2 构网型变流器引发的次同步振荡与宽频振荡问题:机理分析与抑制技术

随着构网型变流器在新型电力系统中的规模化部署,其作为电压源主动支撑电网的能力得到验证的同时,也引发了一系列前所未有的稳定性问题。传统的同步发电机主导的电力系统中,振荡模式主要集中于**低频区间**。然而,构网型变流器通过快速数字控制实现的虚拟同步、惯性响应等先进功能,其控制环路动态与电网阻抗、其他电力电子设备之间产生了复杂的交互作用。这种交互不仅可能诱发经典的**次同步振荡**,更可能催生频率范围从数赫兹到数百赫兹甚至上千赫兹的**宽频振荡**。

技术工作者 1301

Java 8 - IntStream,LongStream,DoubleStream

在 Java 8 中,IntStreamLongStream, 和是专门处理基本类型intlong, 和double的流。这些流是为了提高性能而设计的,因为它们避免了装箱/拆箱操作,这对于大量数据的处理尤其重要。IntStream是一种特殊的流,它用于处理int类型的数据。它提供了一系列方法来高效地操作整数序列。

qq_33240556的博客 1028

工业仪表读数识别:YOLO目标检测 + OCR混合方案实战

仪表整体(meter):粗定位整只仪表,用于快速裁剪、排除背景干扰表盘区域(dial):精确的圆形/方形表盘区域,用于后续矫正和读数数字区域(display)/指针(pointer):数显表定位数码管区域,指针表可辅助定位指针为什么要分三级?因为现场仪表安装角度、距离、光照差异极大。先粗检再精检,比一步到位的准确率高很多,也方便后续做透视变换。工业仪表读数识别,技术路线的选择比算法精度更重要。选对了路线,事半功倍;选错了,怎么调都达不到验收标准。几条落地建议:指针表优先传统算法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 95

白话FOC控制中各环节的参数的意义与如何设置参数

FOC参数整定是控制系统的关键环节,如同驯马需要调节"智能马鞍"。核心参数分为三类:电流环参数(P/I/D)决定响应速度和稳定性,速度环参数需慢于电流环5-10倍带宽,系统参数(极对数、电阻等)是电机固有属性必须准确设置。调参心法:由内而外先调电流环,遵循先P后I慎用D原则,内环带宽必须大于外环。利用自动辨识工具,通过听觉(滋滋声表示P过大)和波形观察来微调,最终实现精准控制。

汽车软件开发 356

java8包装类支持流操作

java8包装类支持流操作1.为什么包装类需要对流进行支持2.有哪些包装类2.1ToLongFunction:Long->long2.2ToIntFunction:Integer->int2.3ToDoubleFunction:Double->double2.4ToDoubleBiFunction:doSome:Double->double 1.为什么包装类需要对流进行支持...

a18792721831的博客 503

小目标检测之改进的YOLOV11算法

MASF-YOLO通过多尺度特征聚合注意力增强自适应融合三大核心创新,显著提升了无人机视角下的小目标检测性能。

hasakie的博客 1715

java中intstream_Java8-Stream之数值流

在Stream里元素都是对象,那么,当我们操作一个数字流的时候就不得不考虑一个问题,拆箱和装箱。虽然自动拆箱不需要我们处理,但依旧有隐含的成本在里面。Java8引入了3个原始类型特化流接口来解决这个问题:IntStream,DoubleStream,LongStream, 分别将流中的元素特化为int、long、doub,从而避免了暗含的装箱成本。每个接口都带来了进行常用数值归约的新方法,比如求和...

weixin_39553458的博客 742

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java8基本类型流的getAsInt()方法

java8基本类型流的getAsInt()方法 ​ 为了避免不必要的拆箱和装箱,Java8引入了三个原始类型特化流接口:Intstream, LongStream和Doublestream,将流中的元素特化为int, long和double,避免暗含的装箱成本。 并且,在这三个特化接口中,提供了常用的数值规约方法,可以方便地进行数值相关的操作,如min,max, sum等。如果需要将基本类型特化流再转换引用类型流,也有相应的方法支持。 ​ 其中,对于Intstream流的**getAsInt()**方法

weixin_51071622的博客 3949

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk8新特性Stream API

jdk8中新加入流Stream接口,主要为处理集合提供了便利,jdk8以后,在集合接口中新增加了默认的sream方法,用来生成流 对象结合Collection的源码增加的stream方法如下: default Stream&lt;E&gt; stream() { return StreamSupport.stream(spliterator(), false); } ...

sinat_41132860的博客 1157

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[Java 8] (3) 字符串遍历和Comparator接口

遍历一个字符串 在Java 8中,CharSequence接口新添加了一个方法叫做chars(),方法的签名是这个样子的: public default IntStream chars() default关键字修饰的接口方法是Java 8中新添加的特性,目的是向接口中添加已经实现的方法。chars()方法返回了一个IntStream类型,所以chars()实际上是为所有实现

不忘初心,好好沉淀 1万+

Java -3- IntStream、LongStream、DoubleStream、BaseStream

这三个原始流类提供了大量的方法用于操作流中的数据,同时提供了相应的静态方法来初始化它们自己。这三个原始流类都在 java.util.stream 命名空间下。

weixin_44708275的博客 433

如何将 Java 8 中的流转换为数组

问题 Java 8 中,什么是将流转换为数组的最简单的方式? 回答 回答 1 最简单地方式就是使用 toArray(IntFunction<A[]> generator) 方法,该方法也是 Java API 所建议使用的方法,详情请戳 String[] stringArray = stringStream.toArray(String[]::new); 该方法通过给定一个整数(即长度)作为参数,然后返回一个字符串数组(String[]),你也可以写你自己的 IntFunction: Strea

村雨遥 948

Java8-Stream之数值流

在Stream里元素都是对象,那么,当我们操作一个数字流的时候就不得不考虑一个问题,拆箱和装箱。虽然自动拆箱不需要我们处理,但依旧有隐含的成本在里面。Java8引入了3个原始类型特化流接口来解决这个问题:IntStream,DoubleStream,LongStream, 分别将流中的元素特化为int、long、doub,从而避免了暗含的装箱成本。每个接口都带来了进行常用数值归约的新方法,比如求和...

weixin_34238633的博客 189

Java8系列

Java8使用

群群的博客 181

java enumerable_Java中是否有类似Enumerable.Range(x,y)的东西?

小编典典编辑:作为Java 8,这可能与 java.util.stream.IntStream.range(int startInclusive, intendExclusive)在Java8之前:Java中没有这样的东西, 但是您可以有如下内容:import java.util.Iterator;public class Range implements Iterable {private in...

weixin_42300398的博客 229

java集合(3)-Java8新增的Stream操作集合

  Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的流接口,而IntStream,LongStream,DoubleStream则代表元素类型为int,long,double的流.   Java8还为上面的每个流式API提供了对应的Builder...

weixin_30457465的博客 161

用lambda求数组的和

其中用了IntStream.of(…).sum()这一方法求和 public class test { public static void main(String[] args) { // TODO 自动生成的方法存根 test tl=new test(); int[] arr=new int[]{1,2,3,4,5,6}; ...

Rashaun`s blog 4708

enumerable java_c# – 在Java中有类似Enumerable.Range(x,y)的东西吗?

编辑:作为Java 8,这可以通过java.util.stream.IntStream.range实现(int startInclusive,int endExclusive)在Java8之前:在Java中没有这样的东西,但你可以有这样的东西:import java.util.Iterator;public class Range implements Iterable {private int ...

weixin_28717683的博客 220

流式编程一

一、流特性概述 使用流,无需迭代集合中的元素,就可以从管道提取和操作元素。这些管道通常被组合在一起,形成一系列对流进行操作的管道。流可以在不使用赋值或可变数据的情况下对有状态的系统建模,这非常有用 声明式编程(Declarative programming)是一种编程风格,它声明想要做什么,而非指明如何做(命令式编程) 显式地编写迭代过程的方式称为外部迭代,而内部迭代是流式编程的一个核心特征,无须显示的书写繁琐的迭代过程。 流是懒加载的。这代表着它只在绝对必要时才计算。你可以将流看作“延迟列表”。由于计算

Mr_moving 886
上一篇: Java-8-Collectors类
下一篇: Java-8-Optional类
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值