【问题标题】:How do I filter out non-int values from a double array using stream?如何使用流从双精度数组中过滤掉非整数值?
【发布时间】:2023-03-13 20:44:01
【问题描述】:

IntelliJ 一直告诉我 Double[] 是一个错误:方法引用中的错误返回类型:无法将 Double[] 转换为 A[]。我使用了 double[],删除了 ::new 静态引用,但仍然是同样的错误。如何解决此错误?我正在尝试在过滤结果中取回 1.000。

double[] pricesDoubleArr = {1.000,2.800,4.900};
double[] pricesDoubleFiltered = Arrays.stream(pricesDoubleArr)
                                      .filter(x -> x != Math.round(x))
                                      .toArray(Double[]::new);

【问题讨论】:

  • 这通常不起作用,因为浮点数不准确。

标签: java filter java-8 int java-stream


【解决方案1】:

只需使用.toArray(); 而不使用Double[]::new,因为您的流从开始就包含一个双精度数组:

double[] doubles = Arrays.stream(pricesDoubleArr)
        .filter(x -> x != Math.round(x))
        .toArray();

我不确定您从代码中看到了什么,但从您的问题来看:

我正在尝试在过滤结果中取回 1.000。

我认为您希望:

.filter(x -> x == (double) (int) x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2014-11-29
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多