ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### [移除元素](https://lingcoder.gitee.io/onjava8/#/book/14-Streams?id=%e7%a7%bb%e9%99%a4%e5%85%83%e7%b4%a0) * `distinct()`:在`Randoms.java`类中的`distinct()`可用于消除流中的重复元素。相比创建一个**Set**集合,该方法的工作量要少得多。 * `filter(Predicate)`:若元素传递给过滤函数产生的结果为`true`,则过滤操作保留这些元素。 在下例中,`isPrime()`作为过滤器函数,用于检测质数。 ~~~ // streams/Prime.java import java.util.stream.*; import static java.util.stream.LongStream.*; public class Prime { public static Boolean isPrime(long n) { return rangeClosed(2, (long)Math.sqrt(n)) .noneMatch(i -> n % i == 0); } public LongStream numbers() { return iterate(2, i -> i + 1) .filter(Prime::isPrime); } public static void main(String[] args) { new Prime().numbers() .limit(10) .forEach(n -> System.out.format("%d ", n)); System.out.println(); new Prime().numbers() .skip(90) .limit(10) .forEach(n -> System.out.format("%d ", n)); } } ~~~ 输出结果: ~~~ 2 3 5 7 11 13 17 19 23 29 467 479 487 491 499 503 509 521 523 541 ~~~ `rangeClosed()`包含了上限值。如果不能整除,即余数不等于 0,则`noneMatch()`操作返回`true`,如果出现任何等于 0 的结果则返回`false`。`noneMatch()`操作一旦有失败就会退出。