有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中如何将二维数组转换为一维数组

我想知道如何将二维数组转换为一维数组。我已经想出了一些代码,但它似乎并不完全有效。有人能帮我吗?谢谢

public class TESTER1 {

    /**
     * @param args
     */

    static String[][] data = new String[][] {{"Dum","Dumer","Dumbest"}};

    public static void main(String[] args) {

        convertData(data);
    }

    public static void convertData(String[][]data) {
        String[] toReturn = new String[data.length];
        for(int i = 0;i<data.length;i++) {
            for(int j = 0;j<3;j++){
                toReturn[i] = data[i][j];
            }
        }
        for(String s:toReturn) {
            System.out.println(s);
        }
    }
}

[编辑]非常感谢。是否可以将字符串[]中的每一行转换为 字符串[]中的索引例如,如果我们转换字符串[][](上面的代码),那么 我打印出数组[0]它应该打印出dum,dummer,dumbest[edit]


共 (4) 个答案

  1. # 1 楼答案

    更简洁的版本:

    public static String[] flatten(String[][] data) {
        List<String> toReturn = new ArrayList<String>();
        for (String[] sublist : Arrays.asList(data)) {
            for (String elem : sublist) {
                toReturn.add(elem);
            }
        }
        return toReturn.toArray(new String[0]);
    }
    
  2. # 2 楼答案

    在Java8中,通过流API,扁平化确实变得容易得多。该函数可以表示为:

    private static String[] flatten(String[][] data) {
        return Stream.of(data).flatMap(Stream::of).toArray(String[]::new);
    }
    
  3. # 3 楼答案

    public static String[] flatten(String[][] data) {
        ArrayList<String> list = new ArrayList<String>();
    
        for(int i = 0; i < data.length; i++) {
            for(int j = 0; j < data[i].length; j++){
                list.add(data[i][j]);
            }
        }
    
        return list.toArray(new String[0]);
    }
    

    或一次添加整行:

        for(int i = 0; i < data.length; i++) {
            list.addAll( Arrays.asList(data[i]) );
        }
    

    编辑: 从我对答案的评论来看,这似乎是OP想要的(即,将2d数组的每一行转换为它的某些字符串表示形式):

    public static String[] rowsToString(String[][] data) {
        ArrayList<String> list = new ArrayList<String>();
    
        for(int i = 0; i < data.length; i++) {
            String row = Arrays.toString(data[i]);
            list.add( row.substring(1, row.length()-1) );
        }
    
        return list.toArray(new String[0]);
    }
    
  4. # 4 楼答案

    一维数组的长度必须是二维数组中所有行的长度之和。当然,Java没有真正的“2维数组”。这段代码可以正常工作,并封装在一个简单的演示程序中

    公共类数组平台{

    public static final String[][] STRINGS2 = {
        {"my", "dog", "has", "fleas"},
        {"how", "now", "brown", "cow"},
        {"short", "row"},
        {"this", "is", "a", "final", "row", "in", "this", "test"},
    };
    
    public static String[] flatten(String[][] a2) {
        String[] result = new String[totalSize(a2)];
        int index = 0;
        for (String[] a1 : a2) {
            for (String s : a1) {
                result[index++] = s;
            }
        }
        return result;
    }
    
    public static int totalSize(String[][] a2) {
        int result = 0;
        for (String[] a1 : a2) {
            result += a1.length;
        }
        return result;
    }
    
    public static void main(String[] args) {
        System.out.println("" + STRINGS2.length + " rows");
        for (String[] strings1 : STRINGS2) {
            System.out.println("" + strings1.length + " strings");
            for (String s : strings1) {
                System.out.print("\t" + s);
            }
            System.out.println();
        }
        String[] strings1 = flatten(STRINGS2);
        System.out.println(strings1.length + " strings");
        for (String s : strings1) {
            System.out.print("\t" + s);
        }
        System.out.println();
    }
    

    }