我有以下数据示例
#data
1 name1
2 name2
3 name3
4 name4
1: 4 2
2: 3 1
3: 2 4
4: 1 3
数据必须分为第一部分,即前 4 行应该 String[]
数组,其余的应该是 String[][]
二维数组。
顺便说一句,第一行已转义,第一部分我需要解析名称的数字,我做了以下操作,它工作正常:
String[] arr1 = lst.stream().skip(1).limit(4)
.map(elm -> elm.substring(0, elm.indexOf(" ")))
.toArray(String[]::new);
对于第二部分,我想了解如何将内容解析为二维数组,如下所示:
String[][] arr2 = {{"4", "2"},
{"3", "1"},
{"2", "4"},
{"1", "3"}};
问题:如何使用 Lambda 表达式将最后 4 行解析为二维数组?
String[][] arr2 = lst.stream().skip(5).limit(lst.size())
.// not sure how to parse data to 2d
.toArray(String[][]::new);
注意:我知道如何以常规方式执行此操作,我只想知道如何在 Lambda 表达式中执行此操作。
最佳答案
IMO 映射器 String
到 String[]
并由正则表达式 [:\s]+
分割必须足够
String[] array = {"#data",
"1 name1",
"2 name2",
"3 name3",
"4 name4",
"1: 4 2",
"2: 3 1",
"3: 2 4",
"4: 1 3"};
List<String> lst = Arrays.asList(array);
String[][] arr2 = lst.stream().skip(5).limit(lst.size())
.map(s -> s.split("[:\\s]+")) // the mapper
.toArray(String[][]::new);
编辑:
List<String> lst = Arrays.asList(array);
String[][] arr2 = lst.stream().skip(5).limit(lst.size())
.map(s -> s.split(":\\s")[1].split("\\s+")) // the mapper
.toArray(String[][]::new);
关于java - Java8中将数据解析为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39418321/