【问题标题】:List of List to 2-dimensional string [duplicate]列表到二维字符串的列表[重复]
【发布时间】:2020-11-02 20:12:34
【问题描述】:

我有一个由

定义的动态列表
List<List<String>> listOfLists = new ArrayList<List<String>>(); 

喜欢:

[[A, B, C, D], [E, F, G, H]]

在这个例子中,它有 2 组,每组 4 个项目,但它可以动态地有 1 组到 n 组。

现在,我需要一个二维字符串,比如:

String[][] data ={{"A", "B", "C", "D"}, {"E", "F", "G", "H"}}

存在一种轻松转换它的方法吗?如果不是,我如何动态创建二维String,我知道列数但不知道行数?

【问题讨论】:

    标签: java


    【解决方案1】:

    使用流试试这样。它流式传输列表并将每个内部列表转换为数组,然后将这两个数组转换为数组数组。

    List<List<String>>  list = List.of(
                    List.of("A", "B", "C", "D"),
                    List.of("E", "F", "G", "H"));
    String[][] arr = list.stream()
                 .map(lst->lst.stream()
                         .toArray(String[]::new))
                 .toArray(String[][]::new);
    
    System.out.println(Arrays.deepToString(arr));
    

    打印

    [[A, B, C, D], [E, F, G, H]]
    

    你也可以这样做。

    String[][] arr = new String[list.size()][];
    for (int i = 0; i < list.size(); i++) {
        arr[i] = list.get(i).toArray(new String[0]);
    }
    
    

    【讨论】:

      【解决方案2】:

      我的建议

      private String[][] toMatrix(List<List<String>> listOfLists) {
          int size = listOfLists.size();
          String[][] result = new String[size][];
      
          for (int i = 0; i < size; i++) {
              List<String> list = listOfLists.get(i);
              result[i] = new String[list.size()];
      
              for (int j = 0; j < list.size(); j++) {
                  result[i][j] = list.get(j);
              }
          }
      
          return result;
      }
      

      【讨论】:

      • 谢谢。这里的问题是我想要一个 2-dim 字符串的结果,每个组有 4 个元素。不是字符串 [][] 数据 ={“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”} 但字符串 [][] 数据 ={ {“A”、“B”、“C”、“D”}、{“E”、“F”、“G”、“H”}}
      • 这就是 toMatrix 方法返回的内容 - String[][](两对括号)。这个{"A", "B", "C", "D", "E", "F", "G", "H"} 的类型是一维数组 - String[](一对括号)。
      • 好的,但是 String[][] 中的项目不是每组 4 个项目。我错了吗?
      • String[][] strings = toMatrix(list); System.out.println(Arrays.deepToString(strings));我得到结果[[A, B, C, D], [E, F, G, H]]
      • 已解决。对不起,但我在脑海中迷失了一件非常愚蠢的事情。非常感谢您的帮助!
      【解决方案3】:

      这应该可行:

      private static String[][] convert(List<List<String>> listOfLists) {
          var result = new String[listOfLists.size()][];
      
          var i = 0;
          for (var list : listOfLists) {
              result[i] = new String[list.size()];
              var j = 0;
      
              for (var elem : list) {
                  result[i][j] = elem;
                  j++;
              }
      
              i++;
          }
      
          return result;
      }
      

      【讨论】:

      • 由于某些原因,我的 android studio 无法识别“var”
      • var 是 Java 10 中新增的 Java 关键字。只需将 var 替换为 String[][]
      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多