范围与聚合操作
range、sum、average、summaryStatistics
范围与聚合操作 是 CoddyKit 上的免费 Java Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。
生成范围
IntStream.range(start, end) 会生成从 start 开始、直到但不包括 end 的连续整数。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.range(0, 5).forEach(System.out::println);
}
}rangeClosed 包含结束值
IntStream.rangeClosed(start, end) 会包含最后一个值,因此 rangeClosed(1, 5) 会生成从 1 到 5 的值。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.rangeClosed(1, 5).sum();
System.out.println(sum);
}
}替代索引循环
遍历数组位置时,范围是基于索引的 for 循环的简洁替代方式。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
String[] names = {"a", "b", "c"};
IntStream.range(0, names.length)
.forEach(i -> System.out.println(i + ": " + names[i]));
}
}sum
sum 会将所有元素相加,并返回基本类型结果。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int total = IntStream.rangeClosed(1, 100).sum();
System.out.println(total);
}
}average
average 返回 OptionalDouble,因为流可能为空。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
double avg = IntStream.of(2, 4, 6, 8).average().getAsDouble();
System.out.println(avg);
}
}min 和 max
min 和 max 返回 OptionalInt。确定流不为空时,请使用 getAsInt。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int hi = IntStream.of(3, 9, 1, 7).max().getAsInt();
int lo = IntStream.of(3, 9, 1, 7).min().getAsInt();
System.out.println(lo + " .. " + hi);
}
}count
count 以 long 类型返回元素数量。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long n = IntStream.rangeClosed(1, 50).filter(x -> x % 3 == 0).count();
System.out.println(n);
}
}summaryStatistics
summaryStatistics 会在一次遍历中计算 count、sum、min、average 和 max,并返回 IntSummaryStatistics。
import java.util.IntSummaryStatistics;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntSummaryStatistics stats = IntStream.of(5, 10, 15, 20).summaryStatistics();
System.out.println(stats);
}
}读取各项统计数据
统计对象提供了 getCount、getSum、getMin、getMax 和 getAverage。
import java.util.IntSummaryStatistics;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntSummaryStatistics s = IntStream.rangeClosed(1, 10).summaryStatistics();
System.out.println("count=" + s.getCount());
System.out.println("avg=" + s.getAverage());
System.out.println("max=" + s.getMax());
}
}组合范围与聚合
范围和聚合可以自然地组合:先生成数据,再进行转换,最后将其归约为一个数字。
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sumOfSquares = IntStream.rangeClosed(1, 4)
.map(n -> n * n)
.sum();
System.out.println(sumOfSquares);
}
}LongStream 聚合
LongStream 提供相同的范围和聚合方法,并返回 LongSummaryStatistics。
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) {
long sum = LongStream.rangeClosed(1, 1000).sum();
System.out.println(sum);
}
}快速检查
range 和 rangeClosed 有什么区别?
回顾
您已经生成并汇总了基本类型范围:
range不包含结束值;rangeClosed会包含结束值。- 聚合操作包括:
sum、average(OptionalDouble)、min/max(OptionalInt)和count。 summaryStatistics会在一次遍历中计算所有这些数据。
常见问题解答
「范围与聚合操作」课时是免费的吗?
是的 — 「范围与聚合操作」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。
「范围与聚合操作」这节课中我会学到什么?
range、sum、average、summaryStatistics 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「范围与聚合操作」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。