Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个未使用的流会对结果产生影响?_Java_Java 8_Java Stream - Fatal编程技术网

Java 为什么这个未使用的流会对结果产生影响?

Java 为什么这个未使用的流会对结果产生影响?,java,java-8,java-stream,Java,Java 8,Java Stream,为什么以下有效未使用的行(在方法中:getAllDefinedVars)会对最终结果产生影响: List collect=allVars.stream().filter(v->false).collect(Collectors.toList()) 如果我删除整个方法和调用此方法的一行代码(GenerateOneSetoBools中的第一行),我最终会得到另一个结果。 我期待这样的行为如果 上述行对列表allVars或任何其他变量有影响 将使用流的结果 就我所知,这一切都没有发生。因此,删除整个方

为什么以下有效未使用的行(在方法中:getAllDefinedVars)会对最终结果产生影响:
List collect=allVars.stream().filter(v->false).collect(Collectors.toList())

如果我删除整个方法和调用此方法的一行代码(GenerateOneSetoBools中的第一行),我最终会得到另一个结果。
我期待这样的行为如果

  • 上述行对列表allVars或任何其他变量有影响
  • 将使用流的结果
  • 就我所知,这一切都没有发生。因此,删除整个方法应该不会影响结果

    为了说服自己,您可以第一次使用包含流的方法运行main,第二次不使用此方法运行main,然后比较输出

    public class PairwiseMain {
        
        private static PairwisePermutator pp = new PairwisePermutator();
    
        public static void main(String[] args) {
            for(int i = 0; i < 20; i++) {
                pp.permutate(i);
                System.out.println("----------------");
            }
        }
    
    }
    
    
    没有流:仅删除GenerateOneSetofool()中的第一行


    两个输出都不同,例如,最后一行,您得到的结果的差异与行无关
    List collect=allVars.stream().filter(v->false.collector(Collectors.toList())。问题是你的算法是不确定的。我已获取了您的代码,并针对相同的输入多次运行它:

    for(int i = 0; i < 20; i++) {
        pp.permutate(5);
        System.out.println("----------------");
    }
    
    我没有逐行检查你的代码,所以我不确定,但我猜你的一些集合不能保证元素的顺序


    然而,有趣的是,当我多次运行
    main
    时,不同版本的输出的显示顺序总是相同的(或者至少在我尝试的5次中)。更重要的是,当您提到的那一行被删除时,顺序就改变了——但在调用main之间保持不变。当我们加上在不同的机器上它的行为不同这一事实时,我的结论是它可能与程序在内存中的放置方式有关。

    您得到的结果的差异与行
    List collect=allVars.stream().filter(v->false).collect(collector.toList())无关。问题是你的算法是不确定的。我已获取了您的代码,并针对相同的输入多次运行它:

    for(int i = 0; i < 20; i++) {
        pp.permutate(5);
        System.out.println("----------------");
    }
    
    我没有逐行检查你的代码,所以我不确定,但我猜你的一些集合不能保证元素的顺序


    然而,有趣的是,当我多次运行
    main
    时,不同版本的输出的显示顺序总是相同的(或者至少在我尝试的5次中)。更重要的是,当您提到的那一行被删除时,顺序就改变了——但在调用main之间保持不变。当我们加上在不同的机器上它的行为不同这一事实时,我的结论是它可能与程序在内存中的放置方式有关。

    filter(v->false)
    意味着get返回一个空列表,忽略listYes的所有数据,但是这个列表从未被使用过,并且所有变量都保持不变。所以你声称
    allVars.stream().filter(v->false).collect(Collectors.toList())
    更改了
    allVars
    的元素?我理解正确吗?这对他们有什么影响?我对这个问题有点困惑。我只是运行了代码,得到了相同的结果。也许你在做别的事情?作为旁注,因为我看到了这个奇怪的
    System.out.println(Arrays.toString(vars.toArray())在不同的帖子中多次出现,你能告诉我它来自哪里吗?有没有一些书、教程或类似的东西使用并推荐这种结构?我的意思是,当我想打印
    vars
    时,首先想到的是
    System.out.println(vars),但一定有一个原因,为什么这么多人认为最好先将整个集合复制到数组中,然后再使用另一个实用方法,现在只需要获得相同的字符串输出。
    filter(v->false)
    意味着返回一个空列表,忽略listYes的所有数据,但是这个列表从未被使用过,并且所有变量都保持不变。所以你声称
    allVars.stream().filter(v->false).collect(Collectors.toList())
    更改了
    allVars
    的元素?我理解正确吗?这对他们有什么影响?我对这个问题有点困惑。我只是运行了代码,得到了相同的结果。也许你在做别的事情?作为旁注,因为我看到了这个奇怪的
    System.out.println(Arrays.toString(vars.toArray())在不同的帖子中多次出现,你能告诉我它来自哪里吗?有没有一些书、教程或类似的东西使用并推荐这种结构?我的意思是,当我想打印
    vars
    时,首先想到的是
    System.out.println(vars),但很多人认为最好先将整个集合复制到一个数组中,然后再使用另一个实用程序方法(现在变得非常必要),以获得相同的字符串输出,这肯定是有原因的。
    
    [true, true, true, true, true]  
    [false, false, false, true, false]  
    [false, false, false, false, true]  
    [true, true, true, false, false]  
    [false, true, true, true, false]  
    [true, false, true, true, false]  
    [true, true, false, false, false]  
    
    for(int i = 0; i < 20; i++) {
        pp.permutate(5);
        System.out.println("----------------");
    }
    
    [true, true, true, true, true]
    [false, false, false, true, false]
    [false, false, false, false, true]
    [true, true, true, false, false]
    [true, false, false, true, false]
    [false, false, true, true, false]
    [true, true, true, false, false]
    ----------------
    [true, true, true, true, true]
    [false, false, false, true, false]
    [false, false, false, false, true]
    [true, true, true, false, false]
    [false, true, true, true, false]
    [true, false, true, true, false]
    [true, true, false, false, false]