java - Java8中将数据解析为二维数组

标签 java lambda java-8 java-stream

我有以下数据示例

#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 映射器 StringString[] 并由正则表达式 [:\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/

相关文章:

c# - 什么时候太多 "lambda action"?

JavaFX 8 如何使用零参数执行 lambda 表达式

Java 使用 Java 8 时间库将 UTC 转换为 PDT/PST

java - 将 List<Long> 转换为计算出现次数的 Map<Long, Long>

java - 缺少资源异常 websphere 门户

java - 如何使用 java 停止特定的 Apache Felix 包

java - 使用单引号时,数字列上的 DB2 逻辑运算给出不同的结果

c# - Linq lambda 用于在列表中搜索列表,找到匹配项,然后将其从列表中删除

java - JPanel 无法正确绘制

Java 8 - 使用 lambdas 推断泛型返回类型