这行 Java 流是什么意思?

What does this line of Java stream mean?

所以我有这行代码。它给了我输出 [6,28]。 你们知道为什么吗?我不知道有人试图打印什么样的数字。

System.out.println( IntStream.range(1,30).filter(n -> IntStream.range(1,n).filter(i->n%i == 0).sum() ==n)
               .boxed().collect(Collectors.toList()));
IntStream.range(1,n).filter(i -> n % i == 0).sum() == n

通过检查 n 除以潜在除数是否没有余数 (i -> n % i == 0) 来计算 n 的所有除数。然后将所有除数相加并与 n 本身进行比较。

IntStream.range(1,30).filter(n -> ...).boxed().collect(Collectors.toList())

只是对 1 到 30 之间的数字执行我上面描述的操作,并且只保留那些比较为 ​​true 的数字。因此,它计算 1 到 30 之间的所有数字,其中除数总和为数字本身。这些被称为 perfect numbers。前两个是6和28,后面是496,...