相关疑难解决方法(0)

Java 8 Stream,获得头尾

Java 8引入了一个类似Scala的StreamStream类,这是一个功能强大的惰性结构,使用它可以非常简洁地执行这样的操作:

def from(n: Int): Stream[Int] = n #:: from(n+1)

def sieve(s: Stream[Int]): Stream[Int] = {
  s.head #:: sieve(s.tail filter (_ % s.head != 0))
}

val primes = sieve(from(2))

primes takeWhile(_ < 1000) print  // prints all primes less than 1000
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能在Java 8中这样做,所以我写了这样的东西:

IntStream from(int n) {
    return IntStream.iterate(n, m -> m + 1);
}

IntStream sieve(IntStream s) {
    int head = s.findFirst().getAsInt();
    return IntStream.concat(IntStream.of(head), sieve(s.skip(1).filter(n -> n % head != 0)));
}

IntStream primes …
Run Code Online (Sandbox Code Playgroud)

java scala sieve java-8 java-stream

23
推荐指数
1
解决办法
9330
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1

scala ×1

sieve ×1