我想使用Java流找到函数sin(i / 100)最小的整数i,其范围为{1,... 1000}。我尝试将min与比较器一起使用,如this question:
Comparator<Integer> sineComparator = (i,j) ->
Double.compare(Math.sin(i/100.0), Math.sin(j/100.0));
IntStream.range(1,1000)
.min(sineComparator);
但由于IntStream没有接受比较器的min变量,所以它不起作用。我该怎么办?
答案 0 :(得分:4)
您必须使用boxed()
将IntStream
转换为Stream<Integer>
,这样您就可以将min
与比较器一起使用:
IntStream.range(1, 1000)
.boxed()
.min(sineComparator)
或者,您可以避免拳击,但代价是降低清晰度:
IntStream.range(1,1000)
.reduce((i,j) -> sineComparator.compare(i, j) <= 0 ? i : j)
另外,您可以使用Comparator.comparingDouble
创建比较器:
Comparator<Integer> sineComparator = Comparator.comparingDouble(i -> Math.sin(i/100.0));