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

Java8流操作优化了吗?[副本]

梁俊智
2023-03-14
myList.getParents().stream()
                .filter(x -> x.getSomeField() == 1)
                .map(x -> x.getOtherField())
                .findFirst();
myList.getParents().stream()
   .filter(x -> x.getSomeField() == 1)
   .findFirst()
   .map(x -> x.getOtherField());

共有1个答案

姜乐语
2023-03-14

不,在Java8流处理流水线中,一个数据项在一次传递中被处理。这样,我们可以执行短路评估,并给我们更多的空间来优化。

例如,在您的例子中,我们采用第一项,应用筛选器,假设它满足筛选条件。然后我们继续进行映射,并推动那个元素。我们不需要访问流源中的任何其他元素,因为我们只需一次处理它。这个短路评估允许我们做更多的优化。

然而,处理管道的第二种表示是错误的。结尾不能有map。但是,终端操作findfirst应该位于管道的末尾。

 类似资料:
  • 我在这里使用的所有方法几乎都是O(1)复杂度,比较器也不太费力,所以这不应该是问题,有什么我可能不知道的东西可以帮助我优化这个流操作吗?也许我用的入口集可以避免...?因为这可能是这里最贵的手术... 编辑1:也许我应该解释一下这个方法背后的想法。它的主要目的是对地图aux进行排序,并返回一个带有排序键的列表(键也被修改了,但这不是主要目的)

  • 本文向大家介绍浅谈java8 stream flatMap流的扁平化操作,包括了浅谈java8 stream flatMap流的扁平化操作的使用技巧和注意事项,需要的朋友参考一下 概念: Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具。简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以将更多的控制权交给集

  • 我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。

  • 问题内容: 我想知道以下脚本是否可以某种方式进行优化。它确实在磁盘上写了很多东西,因为它可能删除了最新的行并重新插入它们。我正在考虑应用“在重复键更新中插入…”之类的东西,并发现了单行更新的一些可能性,但我不知道如何在的上下文中应用它。 编辑: 的架构,,,:http://pastebin.com/3tRVPPVi。 要点是更新列和中的内容。表上有一个触发器,可根据这些列设置列的值。 in是表中的

  • 18.5. 优化列表操作 Soundex 算法的第三步是去除连续重复字符。 怎样做是最佳方法? 这里是我们目前在 soundex/stage2/soundex2c.py 中的代码: digits2 = digits[0] for d in digits[1:]: if digits2[-1] != d: digits2 += d 这里是

  • 18.6. 优化字符串操作 Soundex 算法的最后一步是对短结果补零和截短长结果。最佳的做法是什么? 这是目前在 soundex/stage2/soundex2c.py 中的做法: digits3 = re.sub('9', '', digits2) while len(digits3) < 4: digits3 += "0" return digit