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

惰性流在一个瞬间被评估?[副本]

淳于熙云
2023-03-14

我明白,如果我有一个来自列表(例如过滤器)的惰性流,在我开始对流进行迭代之前,对条件的检查不会开始。

编辑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();

如果在最后一行中,它将花费几次时间来找到第一个元素或不找到。

共有1个答案

郎意
2023-03-14

您可以轻松地为自己回答这样的问题,只需一点点编码。例如,尝试以下方法:

  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());

运行一下,看看有没有意义。

 类似资料:
  • 我正在写一篇关于Java流API的文章。我已经阅读了Stream的整个软件包文档,并在这里查看了类似的问题。 如果我说:“直到终端操作被命中,才会评估流上的中间操作,这将实际执行它们,”我是否正确?我在StackOverflow上看到了混合答案,而且每个中间操作都返回一个Stream,所以我想知道它是否只是返回自己,然后只是跟踪要执行的中间操作。这就是“懒惰评估/执行”的意思吗? 下面的javad

  • 问题内容: 什么是Python中的惰性评估? 一个网站说: 在Python 3.x中,该函数返回一个特殊的范围对象,该对象按需计算列表元素(延迟或延迟评估): 这是什么意思? 问题答案: 由(或在Python2.x中)返回的对象被称为惰性迭代。 生成器没有将整个范围存储在内存中,而是存储的定义并仅在需要时才计算下一个值(又称惰性求值)。 本质上,生成器允许您返回类似于结构的列表,但是这里有一些区别

  • 问题内容: 我知道Java在这种情况下具有智能/惰性评估: 但是关于: 即使返回true 也被调用? 问题答案: 在Java(和其他类似C的语言)中,这称为 短路评估 。* 是的,在第二个示例中总是被调用。也就是说,除非编译器/ JVM可以确定它没有可观察到的副作用,否则在这种情况下它可以选择进行优化,但是无论如何您都不会注意到它们之间的差异。 两者截然不同; 前者本质上是一种优化技术,而第二种则

  • 问题内容: 我最近读到了Python 3的一个好处是它很懒。那就更好了 而不是 我很好奇的是如何使用这种懒惰。如果生成映射对象,例如,如何访问生成的操作/列表中的特定元素。在我所见过的几乎所有文档中,他们都会做类似或的事情(据我所知),它放弃了惰性概念,因为它隐式将地图转换为列表。 我想我正在寻找的是能够以与我可以懒惰地懒惰地生成地图对象类似的方式使用地图对象的能力,并且可以在没有巨大计算量的情况

  • 问题内容: 我正在尝试在Python3中使用。这是我正在使用的一些代码: 但是,由于在Python3中返回了迭代器,因此该代码在Python3中不起作用(但在Python2中可以正常工作,因为该版本的always返回a ) 我当前的解决方案是在迭代器上添加一个函数调用以强制求值。但这似乎很奇怪(我不在乎返回值,为什么要将迭代器转换为列表?) 有更好的解决方案吗? 问题答案: 当您对返回的值不感兴趣

  • 使用方法 性能评估模块提供了一系列用于模型性能评估的函数,这些函数在模型编译时由metrics关键字设置 性能评估函数类似与目标函数, 只不过该性能的评估结果讲不会用于训练. 可以通过字符串来使用域定义的性能评估函数 model.compile(loss='mean_squared_error', optimizer='sgd', metri