相关疑难解决方法(0)

如何在Java中编写正确的微基准测试?

你如何在Java中编写(并运行)正确的微基准测试?

我在这里寻找代码示例和注释,说明要考虑的各种事项.

示例:基准测量应该测量时间/迭代或迭代/时间,为什么?

相关:秒表基准可以接受吗?

java benchmarking jvm jvm-hotspot microbenchmark

835
推荐指数
11
解决办法
11万
查看次数

Stream.sorted()然后收集,或收集List.sort()?

一般来说,这两段代码之间是否存在性能差异?

List<Integer> list1 = someStream1.sorted().collect(toList());
// vs.
List<Integer> list2 = someStream2.collect(toList());
list2.sort(Comparator.naturalOrder())
Run Code Online (Sandbox Code Playgroud)

变体2显然是令人讨厌的,应该避免,但我很好奇是否在Stream 的主流(heh,main stream)实现中内置了任何性能优化,这将导致这两者之间的性能差异.

我想,因为流有关于情况的更多信息,所以它将有更好的优化机会.例如,我想如果这个问题得到了findFirst()解决,那么它就会忽略这种操作,而不是min操作.

java sorting list java-stream collectors

7
推荐指数
1
解决办法
465
查看次数

如果使用自定义Comparator创建,则为SortedMap生成的流的流特征可能不会被分类

由Maurice Naftalin掌握Lambdas,第6章 - 流表演.

有关不同执行阶段(中间和终端)流的不同特征的解释.例如.

Stream.of(8,3,5,6,7,4)//ORDERED, SIZED
.filer(i->i%2==0) // ORDERED
.sorted() // ORDERED, SORTED
.distinct() // DISTINCT, ORDERED, SORTED
.map(i->i+1) // ORDERED
.unordered(); //none
Run Code Online (Sandbox Code Playgroud)

令我困惑的是对SORTED特征的解释:

"如果比较器已被定义并用于此目的,则流元素可能已按其他顺序排序,但此类流不具有SORTED特征."

为什么如果提供自定义比较器来实现排序数据结构(在上面的情况下为SortedMap),框架不会考虑创建具有SORTED特性的流?

java java-8 java-stream

6
推荐指数
1
解决办法
188
查看次数

使用stream().sorted()在Collection.sort()上有什么好处吗?

我曾经使用以下行来在Java中出现流之前对元素进行排序:

Collections.sort(collection, new CustomComparator());
Run Code Online (Sandbox Code Playgroud)

现在我发现我可以通过以下方式获得相同的结果:

collection.stream().sorted(new CustomComparator());
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都使用一个列表和一个实现的自定义比较器Comparator(我需要这个并且不能在类本身上实现它).

我没有找到任何表明它们在任何方面都不同的东西,除了流解决方案看起来更好的事实.

使用流版本有什么好处吗?我的意思是......性能更高吗?有什么区别吗?

java sorting collections java-stream

2
推荐指数
1
解决办法
860
查看次数