作为解析配置字符串的一部分,我想将字符串转换为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}}
下面的清单起作用,但是,我想改进代码如下(我很难做到这一点):
映射(x->new double[]{double.ParseDouble(x[0]),double.ParseDouble(x[1]),double.ParseDouble(x[2])})
),我要对其进行通用重写。列表:
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,20.0]
[500.0,300.0,30.0]
首先,对于“尴尬行”,您可以流式处理每个x
,它是一个double[]
,以及maptodouble
:
.map(x -> Arrays.stream(x).mapToDouble(Double::parseDouble).toArray())
第二,这两条溪流可以非常简单地连接起来。如果没有toArray(size->new string[size][1])
,第一个流就是stream
,这也是arrays.stream(result_s)
生成的。
toArray
将流转换为数组,而Arrays.stream
将数组转换为流,因此Arrays.stream(result_s)
类似于撤消toArray(size->new string[size][1])
所做的事情。这两条线可以互相抵消。
double[][] result_d =
Arrays.stream(ss.split("\\|"))
.map(x -> x.trim().split(","))
.map(x -> Arrays.stream(x).mapToDouble(Double::parseDouble).toArray())
.toArray(double[][]::new);
问题内容: 我想将一个非常大的字符串(例如10,000个字符)分割成N个大小的块。 就性能而言,最佳方法是什么? 例如: 被2分割成。 使用这种方法是否可能实现?如果可以,从性能角度来看,这是否是最佳方法? 问题答案: 您可以执行以下操作: 该方法仍可用于大小不是块大小的整数倍的字符串: 通常,对于要从中提取最多 n个 大小的子字符串的任何字符串,都可以执行以下操作: 如果您的字符串可以包含换行符
本文向大家介绍正则表达式{n,m}量词(至少n次,最多m次),包括了正则表达式{n,m}量词(至少n次,最多m次)的使用技巧和注意事项,需要的朋友参考一下 正则表达式{n,m}量词: {n,m}量词可以重复前面匹配的字符n-m次,至少n次,最多m次。 语法结构: 构造函数方式: 对象直接量方式: 浏览器支持: IE浏览器支持此元字符。 火狐浏览器支持此元字符。 谷歌浏览器支持此元字符。 实例代码:
问题内容: 我需要将浮点数格式化为“ n”个小数位。 试图使用BigDecimal,但返回值不正确… 我需要返回一个浮点数,该浮点数具有我指定的小数位数。 我不需要价值回报 问题答案: 你还可以传递float值,并使用:
问题内容: 试图了解正则表达式,我在重复的部分:。 我有以下代码: 如您所见,两个字符串都不匹配该模式。为什么会这样呢? 问题答案: 您不应该在逗号后加空格,这是多余的。
问题内容: 请看下面的正则表达式,这里是任何正则表达式。 此正则表达式将测试确切X发生的时间或时间。 是否有一个正则表达式量词可以测试的发生恰好或次? 问题答案: 没有单个量词的意思是“恰好是m或n次”。你的操作方式很好。 替代方法是: 其中和是的值。
如果我删除原始YAML中后面的空格,它就可以正常工作