如何在Java8中使用流进行递归?

如何在Java8中使用流进行递归?,java,performance,optimization,java-8,stream,Java,Performance,Optimization,Java 8,Stream,我有一个类似这样的方法,其中我使用普通循环进行递归: // example for the args: "START" "RUN" "RUN" "END" "RUN" "START" "RUN" "END" "RUN" // expect: Listof.("START" "R

我有一个类似这样的方法,其中我使用普通循环进行递归:

//    example for the args: "START" "RUN" "RUN" "END" "RUN" "START" "RUN" "END" "RUN"
//    expect: Listof.("START" "RUN" "RUN" "END", "START" "RUN" "END")
static List<String[]> findValidCommands(String[] args, List<String[]> listCommands) {

        for (int i = 0; i < args.length; i++) {
            if (args[i].matches("START")) {
                for (int j = i + 1; j < args.length; j++) {
                    if ("END".equals(args[j])) {
                        listCommands.add(Arrays.copyOfRange(args, i, ++j));
                        return findValidCommands(Arrays.copyOfRange(args, j, args.length), listCommands);
                    }
                }
            }
        }
        return listCommands;
    }
//参数示例:“开始”“运行”“运行”“结束”“运行”“开始”“运行”“结束”“运行”
//预期:列表。(“开始”“运行”“运行”“结束”“开始”“运行”“结束”)
静态列表FindValidCommand(字符串[]参数,列表命令){
对于(int i=0;i

我是初学者,请帮助我用流改进代码。

流逻辑无法改进代码,相反

但是,可以通过不使用嵌套循环和不使用递归来改进它

静态列表findValidCommand(字符串…参数){
List listCommands=new ArrayList();
对于(int start=-1,i=0;i
试验

List listCommands=findValidCommands(
“开始”、“运行”、“运行”、“结束”、“运行”、“开始”、“运行”、“结束”、“运行”);
System.out.println(listCommands.stream().map(Arrays::toString.collect)(collector.joining(“,”));
输出

[开始,运行,运行,结束],[开始,运行,结束]

你到底想做什么?你只是想找到一对开始和结束?我不明白为什么这应该是递归的。另外,请注意,流不一定“改进”代码。如果你认为每个for循环都应该在流中重写,那么你太沉迷于流了:)-“你只是想找到开始和结束对吗?”,这就是我想要做的“我不明白为什么这应该是递归的”,我不知道其他的方法,你能告诉我怎么做吗,谢谢你。只要用
中断替换递归调用它会给你任何不同的结果吗?啊,我明白了<代码>i=j-1然后<编码>中断应该完成这项工作。但实际上,这真的不是应该在流中完成的事情。我认为代码比循环更难看。我试着只用
中断来做这个版本,它已经很可怕了。哦,当我替换它时,它会给出相同的结果。更多的,你认为它有另一种方法来代替使用两个For循环和两个If-condition吗?哦,非常感谢,你真的救了我一天