据我所知,如果我有一个列表中的延迟流(例如过滤器),那么在我开始对流进行迭代之前,不会检查条件。
但是我想问一下 - 当我开始迭代时,流是迭代所有列表,检查条件,并将所有结果放在“内部列表”中。在一个时刻然后开始迭代并给我内部列表中的元素,或者当它开始迭代时它将仅检查第一个元素;并且在迭代期间,它将检查他当时的每个元素。
此外,我想询问它是否与并行有关。
(我在这个网站上看到了多个问题,题目是“当懒惰的流迭代”时,但不是这个特定的问题 - 如果它一点一点地迭代,所以不要将它重复标记,直到你看到它是完全相同的问题)
编辑3(编辑示例清除) - 例如:
ArrayList<Integer> list=new ArrayList<Integer>();
for(int i=0;i<10000;i++)
list.add(i);//fill the list with integers
Iterator<Integer> iterator=list.stream().filter(j->j%2==0).iterator();
iterator.next();
如果在最后一行,则需要几次才能找到第一个元素。
答案 0 :(得分:0)
您可以通过一些编码轻松地回答这些问题。尝试类似这样的事情:
List<Integer> ints = Arrays.asList(0,1,2,3,4,5,6,7,8,9,10)
.stream()
.peek(i -> System.out.println("Peek 1: " + i))
.filter( i -> i < 10)
.peek(i -> System.out.println("Peek 2: " + i))
.map (i -> String.valueOf(i))
.peek(i -> System.out.println("Peek 3: " + i))
.map (i -> Integer.parseInt(i))
.peek(i -> System.out.println("Peek 4: " + i))
.filter( i -> i < 10)
.peek(i -> System.out.println("Peek 5: " + i))
.collect(Collectors.toList());
运行它,看它是否有意义。