【问题标题】:Java 8 streams: Convert String[] to Float[] [duplicate]Java 8 流:将 String[] 转换为 Float[] [重复]
【发布时间】:2017-10-04 22:25:51
【问题描述】:

我有一个数组String[],我想转换成数组Float[]

考虑e 是通过HttpServletRequest::getParameterMap() 提供的String[]。我试过了:

Arrays.stream(e.getValue()).mapToDouble(Float::parseFloat).boxed().toArray(Float[]::new));

遇到异常:

java.lang.ArrayStoreException: java.lang.Double

然后我尝试了:

Arrays.stream(e.getValue()).mapToDouble(Double::parseDouble).boxed().toArray(Float[]::new));

同样的结果。

【问题讨论】:

  • mapToDouble 替换为 DoubleStream 的双精度流,将 map 替换为 parseFloat 的字符串输入参数。

标签: java type-conversion java-stream


【解决方案1】:
Arrays.stream(e.getValue()).map(Float::valueOf).toArray(Float[]::new);

【讨论】:

    【解决方案2】:

    你可以试试这个来生成一个Float[] 数组:

    Arrays.stream(e.getValue()).map(Float::valueOf).toArray(Float[]::new);
    

    你必须处理可能的NumberFormatException

    不幸的是,原始float 没有类FloatStream,但既然你想得到一个Float[],上面的代码就可以了。

    【讨论】:

    • 重复the other answer
    • @Ivar 谢谢我修好了。
    • @lexicore 好吧,我添加了一些 cmets,然后是您所指的答案。
    【解决方案3】:

    您仍在第二次测试中生成Float[] 数组。

    对于Double[] 结果,使用:

    Arrays
        .stream(e.getValue())
        .mapToDouble(Double::parseDouble)
        .boxed()
        .toArray(Double[]::new);
    

    对于Float[] 结果(在这种情况下不需要boxed),使用:

    Arrays
        .stream(e.getValue())
        .map(Float::parseFloat)
        .toArray(Float[]::new);
    

    【讨论】:

    • 目标是创建Float[],而不是Double[]
    • @lexicore 哎呀。修改。
    猜你喜欢
    • 2020-03-17
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多