【发布时间】:2020-10-03 03:34:31
【问题描述】:
作为解析配置字符串的一部分,我想将字符串转换为 double[][] 数组。配置字符串包含一个或多个 (m) 组,每组三个或更多 (n) 个元素。
对于输入:"0,0,0 | 500,0,10 | 0,300,20 | 500,300,30",
我希望输出:double[][]{{0,0,0},{500,0,10},{0,300,20},{500,300,30}}
下面的清单有效,但是,我想改进代码如下(我很难做到):
- 使代码通用,用于可变数量的 n 元素,这样它就可以接受诸如“0,0,0 | 500,0,10 | 0,300,20,999 这样的输入 | 500,300,30",其中输出 [2] = [0,300,20,999]。我目前使用的是 (
map(x -> new double[]{Double.parseDouble(x[0]),Double.parseDouble(x[1]),Double.parseDouble(x[2])})),我想对其进行一般性重写。 - 理想情况下,将两个流表达式合并为一个表达式,将字符串输入并输出 double[m][n] 一次性。这可能吗?
上市:
String ss = "0,0,0 | 500,0,10 | 0,300,20 | 500,300,30";
System.out.println(ss);
String[][] result_s =
Arrays.
stream(ss.split("\\|")).
map(x -> x.trim().split(",")).
toArray(size -> new String[size][1]);
double[][] result_d =
Arrays.stream(result_s).
//This next line is the embarrassing part and I would like to make it generic (so independent of number of elements
map(x -> new double[]{Double.parseDouble(x[0]),Double.parseDouble(x[1]),Double.parseDouble(x[2])})
.toArray(size -> new double[size][1]);
double[][] result_new = Arrays.stream(ss.split("\\|")).collect(Collectors.toList(entry -> entry.x.trim().split(",")));
Arrays.
stream(ss.split("\\|")).
map(x -> x.trim().split(",")).
map(x -> new double[]{Double.parseDouble(x[0]),Double.parseDouble(x[1]),Double.parseDouble(x[2])}).
toArray(size -> new String[size][1]);
//Strings array
System.out.println("String arrays");
for(String[] rs : result_s) System.out.println(Arrays.toString(rs));
//double array
System.out.println("Double arrays");
for(double[] rs : result_d) System.out.println(Arrays.toString(rs));
输出:
0,0,0 | 500,0,10 | 0,300,20 | 500,300,30
字符串数组
[0, 0, 0]
[500, 0, 10]
[0, 300, 20]
[500, 300, 30]
双数组
[0.0, 0.0, 0.0]
[500.0, 0.0, 10.0]
[0.0, 300.0, 20.0]
[500.0, 300.0, 30.0]
【问题讨论】:
标签: java arrays lambda java-stream