【问题标题】:Java How to convert a stream of stringified points to an ArrayList<Point2D.Double>Java 如何将字符串化点流转换为 ArrayList<Point2D.Double>
【发布时间】:2020-02-28 14:37:36
【问题描述】:

我有一个流 Stream&lt;String&gt; 像上面这样的字符串化点:

("1,2","1,3", "3,4")

我想将它们转换成ArrayList&lt;Point2D.Double&gt;

我正在将它们转换为Stream&lt;DoubleStream&gt;

Stream<DoubleStream> pointList = pointStrList.map(pointStr-> stream(pointStr.split(",")).mapToDouble(d->Double.valueOf(d)));
Stream<Point2D.Double> plist = pointList.map(val-> new Point2D.Double(val.toArray()[0], val.toArray()[1]));

但是当我尝试通过 dping 转换为 ArrayList&lt;Point2D.Double&gt; 时:

ArrayList<Point2D.Double> array = plist.map(val->val);

它提示我一个错误:

Required type: ArrayList<Double> 
Provided: Stream<Object>

【问题讨论】:

    标签: java java-stream data-conversion


    【解决方案1】:

    我认为当你这样做时你的解决方案不起作用:

    val-&gt; new Point2D.Double(val.toArray()[0], val.toArray()[1])

    val 是一个流,您尝试在其上调用toArray() 两次。这不适用于 Streams,当您第一次执行 val.toArray() 时,它会消耗 Stream,并且您不能再次使用该流,因此第二次您会遇到异常。 See here for further explanations

    这样可以直接获取列表:

    List<Point2D.Double> pointList = pointStrList
           .map(pointStr -> pointStr.split(","))
           .map(a -> new Double[] {Double.parseDouble(a[0]), Double.parseDouble(a[1])})
           .map(a -> new Point2D.Double(a[0], a[1]))
           .collect(Collectors.toList());
    
    • 将每个String 映射到String[](拆分)
    • 将每个String[] 映射到Double[] (parseDoule)
    • 将每个Double[] 映射到Point2D.Double
    • 收集到List

    【讨论】:

      【解决方案2】:

      另一种选择(没有任何改进)可能是:

      List<Point2D.Double> pointList = pointStrList
                  .map(pointStr -> Stream.of(pointStr.split(",")))
                  .map(a -> a.mapToDouble(Double::parseDouble).toArray())
                  .map(a -> new Point2D.Double(a[0], a[1]))    
                  .collect(Collectors.toList());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        相关资源
        最近更新 更多