concurrency - Arg-min 使用整数流

标签 concurrency java-8 java-stream

我想使用 Java 流在 {1,...1000} 范围内找到一个整数 i,函数 sin(i/100) 是最小的。我尝试将 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 变体。我能做什么?

最佳答案

你必须使用 boxed() 转换 IntStreamStream<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));

关于concurrency - Arg-min 使用整数流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47585709/

相关文章:

java - 如何在流中添加日期时间值(java)?

java - 使用 JInterface 将列表从 Erlang 发送到 Java

swift - 标准 Swift 数学函数中的运算次数

java - Java 的 ArrayList.stream().anyMatch() 是否保证顺序处理?

java - 如何在java中编写带有两个参数的Action函数

java - 将列表中的对象变量匹配并设置到不同的对象列表

java - 使用 java 8 流生成一个 N 个字符长的虚拟字符串

java - 您如何使用 Java 1.5 BlockingQueue 为多个消费者设计停止条件?

git - 多个客户端push到同一个远程仓库时,git是如何处理并发问题的?

lambda - Java 8 currying 函数,无法确定 int[] 返回类型