可以使用流吗。内部消息功能?[英] Is it possible to use Streams.intRange function?

问题描述

我想使用 Streams.intRange(int start, int end, int step) 来实现逆序流.但是,似乎 java.util.Streams 类不再可用(但它仍在标准库的 rt.jar 中).该方法是在其他类中还是被其他类替换?

推荐答案

JDK中确实没有这种方法了;您可以获得的下一个最接近的是 IntStream.range() 但这只会一步一步地进行.

这里的一个解决方案是实现你自己的 Spliterator.OfInt;例如像这样的东西(非常粗糙;可以改进!):

public final class StepRange
    implements Spliterator.OfInt
{
    private final int start;
    private final int end;
    private final int step;

    private int currentValue;

    public StepRange(final int start, final int end, final int step)
    {
        this.start = start;
        this.end = end;
        this.step = step;
        currentValue = start;
    }

    @Override
    public OfInt trySplit()
    {
        return null;
    }

    @Override
    public long estimateSize()
    {
        return Long.MAX_VALUE;
    }

    @Override
    public int characteristics()
    {
        return Spliterator.IMMUTABLE | Spliterator.DISTINCT;
    }

    @Override
    public boolean tryAdvance(final IntConsumer action)
    {
        final int nextValue = currentValue + step;
        if (nextValue > end)
            return false;
        action.accept(currentValue);
        currentValue = nextValue;
        return true;
    }
}

然后您将使用 StreamSupport.intStream() 从上述类的实例生成您的流.

本文地址:https://www.itbaoku.cn/post/978414.html