java - Java Streams .max() 和 .min() 性能落后?
问题描述
考虑以下 2 个示例。
1 带流
myList.stream().map(this::getInt).max(Integer::compareTo);
2 旧方式
int max = Integer.MIN_VALUE;
for (MyItem item : myList) {
max = Math.max(max, getInt(item));
}
上面getInt
的方法接受一个MyItem
参数并返回一个int
结果。
在这里,与#1 相比,#2 给我的延迟要低得多。有谁知道我为什么或有什么问题?
解决方案
myList.stream().mapToInt(this::getInt).max()
尝试映射到IntStream
. An在内部IntStream
与int
s 一起工作,这避免了装箱和拆箱Integer
对象的开销。此外,IntStream.max()
不需要自定义比较器。
所以你认为突出的原因是“装箱”和“拆箱”?
如果不通过您的基准运行它,我不知道它是否会匹配for
循环的性能。但这将是一个进步。如果它不够好,那么我建议坚持使用循环,因为我看不到任何其他改进它的方法。
推荐阅读
- html - 为什么所有图像都没有出现在屏幕上,因为我想创建一个图像滑块?简而言之,为什么图像不会走出屏幕?
- mdriven - MDriven | 即使默认设置为 Modlr,Modlr 也会在 XML 编辑器中打开
- batch-file - 为什么 xcopy 使用批处理文件创建另一个新文件夹
- c# - c#如何使用实时图表恢复Y轴
- java - Java - 编译错误 - 找不到符号 - 变量终端
- android - 弹出应用程序后仅在 iOS 版本构建中丢失资产
- flutter - dart:为什么本地函数不能互相调用?
- pywinauto - 在 Menustrip pywinauto 中找不到菜单项
- javascript - 如果某些内容已添加到“div”,则滚动到内容的底部
- reactjs - 在 Firebase 上部署后 React 应用程序显示空白页面