0Pricing
Java Academy · 课时

范围与聚合操作

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. IntStream 与 LongStream
  2. 范围与聚合操作
  3. 映射到对象流及从对象流映射
  4. 生成基本类型流
← 返回 Java Academy