【问题标题】:Reusing Stream by Supplier [duplicate]供应商重用流[重复]
【发布时间】:2020-04-12 21:50:15
【问题描述】:

我需要多次使用一个流。 我尝试过这样的事情:

public static void main(String[] args) {

    Stream<Integer> stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8});
    Supplier<Stream<Integer>> saved = saveStream(stream.filter(e -> e % 2 == 0));

    System.out.println(saved.get().count());
    System.out.println(saved.get().max(Integer::compareTo).get());
    System.out.println(saved.get().min(Integer::compareTo).get());
}

public static Supplier<Stream<Integer>> saveStream(Stream<Integer> stream){
    Supplier<Stream<Integer>> result = new Supplier<Stream<Integer>>() {

        @Override
        public Stream<Integer> get() {
            Stream<Integer> st = stream;
            return st;
        }
    };

    return result;
}

但它不起作用......

有什么建议吗?

【问题讨论】:

  • 流是一次性使用的。
  • 尝试阅读documentation on Streams,尤其是关于终端操作的部分。
  • 看起来像Cargo Cult 的一个实例。你使用Supplier,但不知道为什么。

标签: java java-stream supplier


【解决方案1】:

您的供应商不会创建流​​的新实例,而是多次提供相同的实例。

由于流是单次使用的,因此这种方法不起作用。您必须重新创建流。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多