为什么'system.out.println(result.collect(collectors.tolist())'和'result.foreach(system.out::println)`得到不同的结果?

llycmphe  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(148)

我编写了一个函数来使用stream打印斐波那契序列,但是当我想要打印结果时,这两种方法(用numer 1和2标记)给出了不同的结果。

public class Main {
    public static void main(String[] args) {
        ArrayList<BigInteger> list = new ArrayList<>();
        list.add(BigInteger.ONE);
        list.add(BigInteger.ONE);
        list.add(BigInteger.ONE);
        var result = Stream
                .iterate(list, x -> {
                    x.set(0, x.get(0).add(BigInteger.ONE));
                    var temp = x.get(2);
                    x.set(2, x.get(2).add(x.get(1)));
                    x.set(1, temp);
                    return x;
                })
                .limit(10);

//        System.out.println(result.collect(Collectors.toList())); // 1
//        result.forEach(System.out::println);                     // 2
    }
}

方法1为我提供了包含相同元素的列表:

[[10, 55, 89], [10, 55, 89], [10, 55, 89], [10, 55, 89], [10, 55, 89], [10, 55, 89], [10, 55, 89], [10, 55, 89], [10, 55, 89], [10, 55, 89]]

方法2给出了我想要的结果。

[1, 1, 1]
[2, 1, 2]
[3, 2, 3]
[4, 3, 5]
[5, 5, 8]
[6, 8, 13]
[7, 13, 21]
[8, 21, 34]
[9, 34, 55]
[10, 55, 89]

为什么? .collect(Collectors.tolist()) 给了我错误的结果?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题