Java 如何将字符串化点流转换为 ArrayList<Point2D.Double>
Java How to convert a stream of stringified points to an ArrayList<Point2D.Double>
我有一个像上面这样的字符串化点流 Stream<String>
:
("1,2","1,3", "3,4")
我想将它们转换成 ArrayList<Point2D.Double>
我正在将它们转换为 Stream<DoubleStream>
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<Point2D.Double>
时:
ArrayList<Point2D.Double> array = plist.map(val->val);
提示错误:
Required type: ArrayList<Double>
Provided: Stream<Object>
我认为当您这样做时您的解决方案无法工作:
val-> 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
替代方案(没有任何改进)可以是:
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());
我有一个像上面这样的字符串化点流 Stream<String>
:
("1,2","1,3", "3,4")
我想将它们转换成 ArrayList<Point2D.Double>
我正在将它们转换为 Stream<DoubleStream>
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<Point2D.Double>
时:
ArrayList<Point2D.Double> array = plist.map(val->val);
提示错误:
Required type: ArrayList<Double>
Provided: Stream<Object>
我认为当您这样做时您的解决方案无法工作:
val-> 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
替代方案(没有任何改进)可以是:
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());