本章节我们提供一些 Java 8 中的 IntStream
、LongStream
和 DoubleStream
使用范例。IntStream
、LongStream
和 DoubleStream
分别表示原始 int
流、 原始 long
流 和 原始 double
流。
这三个原始流类提供了大量的方法用于操作流中的数据,同时提供了相应的静态方法来初始化它们自己。
这三个原始流类都在 java.util.stream
命名空间下。
java.util.stream.IntStream
java.util.stream.IntStream
是一个原始整数值序列 ( sequence ) 。该流提供了许多方法可以对该流中的元素顺序执行或并行执行一些聚合操作,比如 max()
或 average()
聚合方法
方法 | 说明 |
---|---|
rangeClosed(a,b) | 返回子序列[a,b),左闭又开。意味着包括b元素,增长步值为1 |
range(a,b) | 返回子序列[a,b),左闭右开,意味着不包括b |
sum | 计算所有元素的总和 |
sorted | 排序元素 |
这些方法使用示例如下
IntStreamDemo.java
package cn.twle.util.stream;
import java.util.stream.IntStream;
public class IntStreamDemo {
public static void main(String[] args) {
System.out.println("--Using IntStream.rangeClosed--");
IntStream.rangeClosed(13, 15).map(n->n*n).forEach(s->System.out.print(s +" "));
System.out.println("\n--Using IntStream.range--");
IntStream.range(13,15).map(n->n*n).forEach(s->System.out.print(s +" "));
System.out.println("\n--Sum of range 1 to 10--");
System.out.print(IntStream.rangeClosed(1,10).sum());
System.out.println("\n--Sorted number--");
IntStream.of(13,4,15,2,8).sorted().forEach(s->System.out.print(s +" "));
}
}
运行结果如下
--Using IntStream.rangeClosed--
169 196 225
--Using IntStream.range--
169 196
--Sum of range 1 to 10--
55
--Sorted number--
2 4 8 13 15
LongStream
java.util.stream.LongStream
是一个原始长整型值序列 ( sequence ) 。该流提供了许多方法可以对该流中的元素顺序执行或并行执行一些聚合操作。其实,它的使用方式和 IntStream
一样,因为提供的方法也一样,我们就不做展开了,直接看范例
LongStreamDemo.java
package cn.twle.util.stream;
import java.util.stream.LongStream;
public class LongStreamDemo {
public static void main(String[] args) {
System.out.println("--Using LongStream.rangeClosed--");
LongStream.rangeClosed(13, 15).map(n->n*n).forEach(s->System.out.print(s +" "));
System.out.println("\n--Using LongStream.range--");
LongStream.range(13,15).map(n->n*n).forEach(s->System.out.print(s +" "));
System.out.println("\n--Sum of range 1 to 10--");
System.out.print(LongStream.rangeClosed(1,10).sum());
System.out.println("\n--Sorted number--");
LongStream.of(13,4,15,2,8).sorted().forEach(s->System.out.print(s +" "));
}
}
输出结果如下
--Using LongStream.rangeClosed--
169 196 225
--Using LongStream.range--
169 196
--Sum of range 1 to 10--
55
--Sorted number--
2 4 8 13 15
DoubleStream
java.util.stream.LongStream
是一个原始双精度浮点型序列 ( sequence ) 。该流提供了许多方法可以对该流中的元素顺序执行或并行执行一些聚合操作。它的使用方式和 IntStream
一样,提供的方法也一样,除此之外,还额外提供了几个聚合方法
方法 | 说明 |
---|---|
average | 计算平均值 |
max | 查找最大值 |
下面的代码是 DoubleStream 类的一些简单的使用示例
package cn.twle.util.stream;
import java.util.function.DoublePredicate;
import java.util.stream.DoubleStream;
public class DoubleStreamDemo {
public static void main(String[] args) {
System.out.println("--Using DoubleStream.of--");
DoubleStream.of(5.33,2.34,5.32,2.31,3.51).map(d->d*1.5).forEach(s->System.out.print(s +" "));
System.out.println("\n--Using DoubleStream.average--");
double val = DoubleStream.of(12.1,11.2,13.3).average().getAsDouble();
System.out.println(val);
System.out.println("--Using DoubleStream.max--");
val = DoubleStream.of(12.1,11.2,13.3).max().getAsDouble();
System.out.println(val);
System.out.println("--Using DoubleStream.filter--");
DoublePredicate range = d -> d > 12.11 && d < 12.99;
DoubleStream.of(12.1,11.2,12.3).filter(range).forEach(d->System.out.print(d));
}
}
输出结果如下
--Using DoubleStream.of--
7.995 3.51 7.98 3.465 5.265
--Using DoubleStream.average--
12.200000000000001
--Using DoubleStream.max--
13.3
--Using DoubleStream.filter--
12.3
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。