[英]How can you convert a 2 dimensional array into a 1 dimensional array in Java
I would like to know how to convert a 2 dimensional array into a 1 dimensional array. 我想知道如何将二维数组转换为一维数组。 I have come up with some code but it doesn't exactly seem to work.
我已经提出了一些代码,但它似乎并不完全正常。 Can someone please help me?
有人可以帮帮我吗? Thanks.
谢谢。
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);
}
}
}
[edit]Thank you very much. [编辑]非常感谢你。 Is it possible to convert each row in the String[][] into a index in a String[] for example if we convert the String[][] (above code), then when i print out array[0] it should print out dum,dummer,dumbest [edit]
是否可以将String [] []中的每一行转换为String []中的索引,例如,如果我们转换String [] [](上面的代码),那么当我打印出数组[0]时,它应该打印out dum,dummer,dumbest [编辑]
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]);
}
Or add whole rows at one time: 或者一次添加整行:
for(int i = 0; i < data.length; i++) {
list.addAll( Arrays.asList(data[i]) );
}
Edit: From comments on my answer it seems like this is what the OP wanted (ie converting each row of 2d array to some string representation of it): 编辑:从我的答案的评论看起来这似乎是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]);
}
A cleaner version: 更清洁的版本:
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]);
}
The length of the 1-dimensional array must be the sums of the lengths of all rows in the 2-dimensional array. 一维数组的长度必须是二维数组中所有行的长度之和。 Of course, Java doesn't really have "true" 2-dimensional arrays, but arrays of arrays.
当然,Java并不真正拥有“真正的”二维数组,而是数组数组。 This code works, and is wrapped in a simple demo program.
此代码有效,并包含在一个简单的演示程序中。
public class ArrayFlattening { public class ArrayFlattening {
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();
}
} }
Flatten did become much easier in Java 8 with the stream API. 使用流API在Java 8中使Flatten变得更加容易。 The function can be expressed as:
该功能可表示为:
private static String[] flatten(String[][] data) {
return Stream.of(data).flatMap(Stream::of).toArray(String[]::new);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.