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

就Java流的性能而言,什么更好:组合过滤器还是组合环境?[副本]

居星阑
2023-03-14

需要筛选所有适合其字段的特定环境的对象。假设对象有几个字段:

class Price {
int first;
int second; 
String third; 
}

和价格流:

Stream<Price> streamPrices; 

什么是最好的选择:

streamPrices
    .parallel()
    .filter(p0->p0.first> 10)
    .filter(p1->p1.second <30)
    .filter(p2-> p2.third.length() > 8);

2.

streamPrices
   .parallel()
   .filter(p-> (p.first > 10) 
      && (p->p.second <30) 
      && (p-> p.third.length() > 8)
    );

我使用了JMH框架,但我没有得出一个明确的结论。

共有1个答案

蔚和安
2023-03-14

不要担心性能,毕竟过早的优化是万恶之源。它通常远不如设计良好、可读且易于维护的代码重要。

测量性能是很棘手的,尤其是在时。例如,对于较小的列表,您可能会发现parallesequential慢,因为线程的开销大于收益。您还会发现,通常比传统的迭代器效率低,因为流是编译器将其转换为对象和方法调用的语法糖。

话虽如此,差异微乎其微,甚至不值得再考虑。

 类似资料:
  • 有没有办法把这两条流合并成一条?我使用第一个流在嵌套列表中进行过滤和查找,并使用第二个流根据流的结果创建地图。我想知道是否有一种方法可以用一条流来实现这一点。 像这样的

  • 在jdk8中,Stream提供带有、和的功能 我在注释中看到了将String Stream转换为String的示例,但我很困惑组合器在函数签名中的用途。我认为在累加器中,新元素已添加到结果大陆? 我尝试给组合器一个null值,但我得到了一个null指针异常。

  • 我想要一个组合框,它会在用户键入时过滤列表项。它应该如下工作: 键入时,文本字段应该显示一个可能的选择,但是用户尚未键入的单词部分应该突出显示。 当他打开列表时,下拉框应该只显示可能的选项? 使用箭头键,用户应该在缩小可能的项目后选择剩余的项目之一。 过滤并不重要,跳转到第一个匹配的选择也可以。 有类似的吗?

  • 问题内容: 我想过滤java.util.Collection基于谓词的。 问题答案: Java 8(2014)在一行代码中使用流和lambda解决了此问题: 这是一个教程。 使用修改收集到位。(注意:在这种情况下,谓词将删除满足该谓词的对象): 允许过滤集合而无需编写循环或内部类: 你能想象一些更具可读性的东西吗?

  • 问题内容: 我正在使用ES 1.7,试图使用完全匹配字符串来搜索文档。单独使用时,过滤器可以正常工作,但是当我组合使用过滤器时,会出现错误。 例如:人员文档 -通过姓名和地址搜索人员,效果很好。 -通过姓名和电话号码搜索人也可以。 但是,当我尝试同时使用过滤器,地址和电话时,出现错误 例如: 一起使用和过滤器时出现错误: 索引映射(人): 我用来测试的文件 问题答案: 最终,我能够重现该问题,因为

  • 组合流允许将多个不同的流组合成一个流,这两个流可以分别为流式传输和非流式传输。 构建组合流 var combineStream = new CombineStream() 函数原型 CombineStream(Stream left, Stream right, bool closed = false); 参数 描述 left 左侧的流 right 右侧的流 closed 是否在流读取完成后自