当前位置: 首页 > 知识库问答 >
问题:

流已被操作或关闭

太叔富
2023-03-14

方法是

private List<HighWay> getWillSave(List<HighWay> total,
        HighWayRepository repository) {

    List<HighWay> willSave = new ArrayList<HighWay>();
    int lastSaved = total.size() - 1;
    while (lastSaved >= 0
            && repository.exists(total.get(lastSaved).getId())) {
        lastSaved--;
    }
    willSave.addAll(total.subList(0, ++lastSaved));
    return willSave;
}

现在我试着像这样改成stream,但我不知道这种改是否正确:

private List<HighWay> getWillSave(Stream<HighWay> notDealItem,
        HighWayRepository repository) {

    List<HighWay> willSave = new ArrayList<HighWay>();
    long lastSaved = notDealItem.count()-1;
    while (lastSaved >= 0
            && repository.exists(notDealItem.skip(lastSaved-1).findFirst().get().getId())) {
        lastSaved--;
    }
    willSave.addAll(notDealItem.collect(Collectors.toList()).subList(0, (int)(++lastSaved)));
    return willSave;
}

如何避免出现例外,解决问题?

我应该以某种方式重构代码吗?

共有1个答案

湛宏旷
2023-03-14

好吧,我想你可以做这样的事...但与我们使用真正的函数式语言所能做的相比,它是非常不优雅的:

private List<HighWay> getWillSave(List<HighWay> total, HighWayRepository repository) {
    List<HighWay> willSave = new ArrayList<HighWay>();
    int size = total.size();
    int index = 
        IntStream.range(0,size)
            .mapToObj(i -> new Pair<>(i,size - i - 1))
            .filter(p -> !repository.exists(p.getValue().getId()))
            .findFirst()
            .orElseGet(() -> new Pair<>(0,null)).getKey();
    return total.subList(0,index);
}
 类似资料:
  • 问题内容: 我正在尝试使用Stream API生成Order实例。我有一个创建订单的工厂函数,并且使用DoubleStream初始化订单金额。 如果我使用文字(1.0)初始化Order实例,则可以正常工作。当我使用doubleStream创建随机数量时,将引发异常。 问题答案: 答案在(重点是我的)的javadoc中: 流仅应操作一次(调用中间流或终端流操作) 。例如,这排除了“分叉”流,其中相同

  • 下面是我的代码: 从下面的函数调用上面的函数: 我不知道为什么。

  • 我想复制一个Java8流,这样我可以处理它两次。我可以

  • 我想复制一个Java 8流,这样我可以处理它两次。我可以作为列表并从中获取新流; 但我觉得应该有一个更高效/更优雅的方法。 有没有一种方法可以复制流而不将其变成集合? 我实际上正在处理一个流,所以在移动到右侧投影并以另一种方式处理之前,希望先以一种方式处理左侧投影。类似于这样(到目前为止,我不得不使用技巧)。

  • 问题内容: 我想复制一个Java 8流,以便可以处理两次。我可以collect列出并从中获得新的信息流; 但我认为应该有一种更有效/更优雅的方法。 有没有一种方法可以复制流而不将其转换为集合? 我实际上正在使用 流,因此想先处理左侧投影,然后再移至右侧投影并以另一种方式处理。有点像这样(到目前为止,我被迫使用这种技巧)。 问题答案: 你可以将局部变量与一起使用,以设置流管道的公共部分。 从http