我有一个流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]));
但是当我尝试转换为 ArrayList<Point2D.Double>
时通过 dping:
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
- 收集到
列表
关于Java 如何将字符串化点流转换为 ArrayList<Point2D.Double>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60453898/