Ere*_*evi 3 concurrency java-8 java-stream
我想使用 Java 流在 {1,...1000} 范围内找到一个整数 i,其中函数 sin(i/100) 最小。我尝试将 min 与比较器一起使用,如本问题所示:
Comparator<Integer> sineComparator = (i,j) ->
Double.compare(Math.sin(i/100.0), Math.sin(j/100.0));
IntStream.range(1,1000)
.min(sineComparator);
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为 IntStream 没有接受比较器的 min 变体。我能做什么?
您必须使用boxed()to convert IntStreamtoStream<Integer>允许您min与比较器一起使用:
IntStream.range(1, 1000)
.boxed()
.min(sineComparator)
Run Code Online (Sandbox Code Playgroud)
或者,您可以避免拳击,但代价是清晰度降低:
IntStream.range(1,1000)
.reduce((i,j) -> sineComparator.compare(i, j) <= 0 ? i : j)
Run Code Online (Sandbox Code Playgroud)
另外,您可以使用Comparator.comparingDouble以下方法创建比较器:
Comparator<Integer> sineComparator = Comparator.comparingDouble(i -> Math.sin(i/100.0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |