Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中如何将二维数组转换为一维数组_Java_Arrays - Fatal编程技术网

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

在Java中如何将二维数组转换为一维数组,java,arrays,Java,Arrays,我想知道如何将二维数组转换为一维数组。我已经想出了一些代码,但它似乎并不完全有效。有人能帮我吗?谢谢 public class TESTER1 { /** * @param args */ static String[][] data = new String[][] {{"Dum","Dumer","Dumbest"}}; public static void main(String[] args) { convertData

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

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);
        }
    }
}
公共类测试员1{
/**
*@param args
*/
静态字符串[][]数据=新字符串[][{{{“Dum”,“Dumer”,“Dumbest”};
公共静态void main(字符串[]args){
转换数据(数据);
}
公共静态无效数据(字符串[][]数据){
String[]toReturn=新字符串[data.length];
对于(int i=0;i
公共静态字符串[]展平(字符串[][]数据){
ArrayList=新建ArrayList();
对于(int i=0;i
或一次添加整行:

    for(int i = 0; i < data.length; i++) {
        list.addAll( Arrays.asList(data[i]) );
    }
for(int i=0;i
编辑: 从我对答案的评论来看,这似乎是OP想要的(即,将2d数组的每一行转换为它的某些字符串表示形式):

公共静态字符串[]行字符串(字符串[][]数据){
ArrayList=新建ArrayList();
对于(int i=0;i
更干净的版本:

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]);
}
公共静态字符串[]展平(字符串[][]数据){
List toReturn=new ArrayList();
for(字符串[]子列表:Arrays.asList(数据)){
for(字符串元素:子列表){
toReturn.add(elem);
}
}
返回toReturn.toArray(新字符串[0]);
}

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

公共类阵列平台{

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();
}

}

在Java 8中,通过流API,扁平化变得容易多了。函数可以表示为:

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

这只是一种可能的方法。它可以以内存为代价更简单,也可以更复杂但更高效。非常感谢,但我有一个问题..如何更改它,使每一行都等于字符串[]中的一个索引?很高兴提供帮助。行等于索引是什么意思?行不能等于索引…当我说行等于索引时,我的意思是从行中获取所有信息并将其添加到一个索引中,就像上面的代码获取每个元素并添加到数组中,我希望行被添加,而不是每个元素。就像我说的是在,就像我运行它时,它分别返回元素,每个元素都属于数组中的不同索引。我希望它这样,当它打印出ray[0]时,它会在一个字符串中返回dum,dummer,dumbest on。嘿,Joel。在SF中没有我的Knuth。有一个推广(甚至一个定理)吗你知道吗?我正试图以一种可逆且高效的方式从二维投影到一维。我有一个优势,就是从预先设定的大小开始。也许这值得另一篇文章。。。
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();
}
private static String[] flatten(String[][] data) {
    return Stream.of(data).flatMap(Stream::of).toArray(String[]::new);
}