Java 如何将字符串化点流转换为 ArrayList<Point2D.Double>

标签 java java-stream data-conversion

我有一个流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/

相关文章:

java - static int 变量线程安全吗?

java - JPanel 内带有 FlowLayout 的 JPanel 与 GridBagLayout 未正确锚定

java - 在并行流上调用顺序使所有先前的操作顺序

Java 8 流立即求和并计数

python - 使用 spaCy 3.0 将数据从旧的 Spacy v2 格式转换为全新的 Spacy v3 格式

c++ - 将八进制分数转换为十进制 - C++

javascript - 从 webelement 读取字符串并将其转换为小数

java - 什么是散列中的折叠技术以及如何实现它?

java jsp if语句

java - 如何使用流外的值创建带有 Java 流 API 的 map ?