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

流和惰性计算

柯冯浩
2023-03-14

我读了Java8API中关于流抽象的内容,但我不太理解这句话:

当筛选操作创建一个新流时,该流是否包含已筛选的元素?它似乎理解了流只有在遍历时才包含元素,即使用终端操作。但是,than,什么包含过滤后的流?我糊涂了!!!

共有1个答案

陆宇航
2023-03-14

它意味着滤波器仅在终端操作期间应用。想想这样的事情:

public Stream filter(Predicate p) {
    this.filter = p; // just store it, don't apply it yet
    return this; // in reality: return a new stream
}
public List collect() {
    for (Object o : stream) {
        if (filter.test(o)) list.add(o);
    }
    return list;
}

(这不是汇编,是对现实的简化,但原则是存在的)

 类似资料:
  • 问题内容: 我的JPA实体具有如下列表: 和地图形式ElementParameter 当我获得带有elementParameters列表的实体并在其上执行流时,即使我使用.size()触发列表,但是当我使用for循环执行相同操作时,它也无济于事。 有什么解决方案可以使该流工作?我使用eclipselink作为JPA提供程序。 问题答案: 显然,您是指此问题。这些使用从实际实现(此处)继承的反模式的

  • 本文向大家介绍简单探索 Java 中的惰性计算,包括了简单探索 Java 中的惰性计算的使用技巧和注意事项,需要的朋友参考一下 前言 惰性计算(尽可能延迟表达式求值)是许多函数式编程语言的特性。惰性集合在需要时提供其元素,无需预先计算它们,这带来了一些好处。 首先,您可以将耗时的计算推迟到绝对需要的时候。其次,您可以创造无限个集合,只要它们继续收到请求,就会继续提供元素。第三,map 和 filt

  • 我有一个按月-年字符串属性排序的对象列表。我的对象类定义如下 我想对会员人数、非会员人数、会员付款、非会员付款进行累计和 所以我的新对象列表如下 我尝试与但它给我所有的总和不累积。 非常感谢任何指点。

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

  • 假设我在pebble或freemarker中有一个模板(我正在考虑使用的两个引擎)。它可能看起来像这样: 在我的Java代码中,我需要提供一个包含这些变量的对象,我相信它可以是两个引擎中变量名到对象的映射。 编辑:我不知道模板会是什么样子,当我必须评估它,因为它将由用户定义。甚至他们提供的变量都将是用户定义的字符串-这就是为什么我需要在提供数据之前获取(并分析)它们。

  • 简介 惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式。惰性求值自然地在数据结构中包含递归,可以以简单的方式表示无限的概念,这种方式有利于程序的模块化。 你可以从《Why Functional Programming Matters》中知晓惰性计算可以带来哪些好处。 Haskell语言以采用惰性求值而广为人熟知。Scheme也部分采用了惰性求值。 用于惰性求值的函数 下面这