相关疑难解决方法(0)

如何跳过从Files.lines获得的Stream <String>的偶数行

在这种情况下,只有奇数行具有有意义的数据,并且没有唯一标识这些行的字符.我的目的是获得与以下示例等效的内容:

Stream<DomainObject> res = Files.lines(src)
     .filter(line -> isOddLine())
     .map(line -> toDomainObject(line))
Run Code Online (Sandbox Code Playgroud)

没有共享全球状态,有没有"干净"的方式去做?

java-8 java-stream

10
推荐指数
2
解决办法
1358
查看次数

为什么 stream.spliterator() 的 tryAdvance 可能会将项目累积到缓冲区中?

SpliteratorStream管道中获取 a可能会返回StreamSpliterators.WrappingSpliterator的实例。例如,得到以下内容Spliterator

Spliterator<String> source = new Random()
            .ints(11, 0, 7) // size, origin, bound
            .filter(nr -> nr % 2 != 0)
            .mapToObj(Integer::toString)
            .spliterator();
Run Code Online (Sandbox Code Playgroud)

鉴于上述情况Spliterator<String> source,当我们通过 的tryAdvance (Consumer<? super P_OUT> consumer)方法(Spliterator在本例中为StreamSpliterators.WrappingSpliterator的实例)单独遍历元素时,它将首先将项目累积到内部缓冲区中,然后再消费这些项目,如我们在StreamSpliterators.java所见#298。从简单的角度来看,doAdvance()首先将项目插入到buffer,然后获取下一个项目并将其传递给consumer.accept (…)

public boolean tryAdvance(Consumer<? super P_OUT> consumer) {
    boolean hasNext = doAdvance();
    if (hasNext)
        consumer.accept(buffer.get(nextToConsume));
    return hasNext;
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有弄清楚 this 的需要buffer

在这种情况下,为什么不简单地将 的 …

java java-8 java-stream

7
推荐指数
3
解决办法
906
查看次数

标签 统计

java-8 ×2

java-stream ×2

java ×1