Я думаю, что ваше решение не может работать, когда вы делаете:
val-> new Point2D.Double(val.toArray()[0], val.toArray()[1])
val
- это поток, и вы пытаетесь дважды вызвать toArray()
для него. Это не работает с потоками, когда вы делаете val.toArray()
в первый раз, он потребляет поток, и вы не можете использовать этот поток снова, поэтому во второй раз вы получите исключение. См. Здесь для дальнейших объяснений
Вы можете получить список непосредственно следующим образом:
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[]
(split ) - сопоставить каждый
String[]
с Double[]
(parseDoule) - сопоставить каждый
Double[]
с Point2D.Double
- собрать с
List