[英]Recursively get strings from array columns
我有一個對象數組。 每個數組元素的內容可以是String,也可以是另一個包含字符串的數組。 或者也可以是保存字符串的數組的數組。
例:
Object obj1 = array[[str1, str2, str3], [str4, str5]]
or: Object obj2 =array [str1, str2]
or: Object obj3 = "this string"
我需要一個以該對象為參數的方法,如果它是前兩種情況之一,則返回包含這些元素的單個數組。 如果是最后一種情況,它將返回帶有作為參數傳入的單個字符串元素的數組。
所以,如果我願意
getDataForColumn(obj1) i get array: [str1, str2. str3....str5]
getDataForColumn(obj2) i get array: [str1, str2] //same as input, i know
getDataForColumn(obj3) i get array: ["this string"]
我正在嘗試,但是我真的無法繞開遞歸的方式,至少在這種情況下也不可能。
這是我想出的,並卡住的。
private static Object[] getDataForColumn(Object column) {
if(column instanceof Object[]){
Object[] castarray = (Object[])column;
Object[]newArray = new Object[castArray.length];
for (int i = 0; i < castarray.length; i++) {
if((castarray[i] instanceof Object[])){
//recursion, but how :D
}
else{
newArray[i] = castArray[i];
}
}
return newArray;
}
return new array with object that came in.....
}
請幫忙。 謝謝
我建議使用ArrayList依次將所有平展的數組添加在一起。 您可以創建一個合並當前“結果” -Array和遞歸調用返回的Array的Array,但是使用ArrayList可以使它更容易。 這樣,您不必迭代兩個數組並將它們放在一起成為一個數組。
private static Object[] getDataForColumn(Object column) {
ArrayList results = new ArrayList();
if(column instanceof Object[]){
Object[] castarray = (Object[])column;
for (int i = 0; i < castarray.length; i++) {
if((castarray[i] instanceof Object[])){
results.addAll(Arrays.asList(getDataForColumn(castarray[i])))
}
else{
results.add(castarray[i]);
}
}
return results.toArray();
}
我沒有對此進行測試,但我認為應該可以!
希望能有所幫助。
getDataFromColumn(Object column) {
List<String> list = new LinkedList<String>();
recGetData(column,list);
return list.toArray();
}
public void recGetData(Object column,List<String> list) {
if (column instanceof String) {
list.add((String)column);
} else {
for (Object o : (Object[])column) {
recGetData(o,list);
}
}
}
希望你的意思。
尚未測試,但應該可以...
這是一個簡單的方法。 我使用List是因為我更喜歡在數組上使用它,但是您當然可以制作一個包裝程序,最后將其轉換為數組:
public static List<String> flat(Object o)
{
List<String> strings = new ArrayList<String>();
if (o.getClass().isArray())
{
Object[] oarr = (Object[]) o;
for (Object obj : oarr)
{
strings.addAll(flat(obj));
}
}
else
{
strings.add(o.toString());
}
return strings;
}
是的,這是可能的,也許不是最好的方法。
private static Object[] getDataForColumn(Object column) {
if(column instanceof Object[]){
Object[] castarray = (Object[])column;
Object[] newArray = new Object[castArray.length];
for (int i = 0; i < castarray.length; i++) {
newArray[i] = getDataForColumn(castarray[i]);
}
} else {
String[] newArray = {column};
}
return newArray;
}
我沒有測試過,但是我希望可以給你這個主意
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.