2017-03-02 8 views
1

私は、Arrayリストを保持するリストを持っていると私はそれが多次元配列に変換したい:多次元リストをJavaの多次元配列に変換するにはどうすればよいですか?

/* 
The logs looks something like this 
[Name: Foo, From: Somewhere, To: Somewhere] 
[Name: Foo1, From: Somewhere1, To: Somewhere1] 
[Name: Foo2, From: Somewhere2, To: Somewhere2] 
... 
*/ 

public static void main(String[] args) { 
    List<ArrayList<String>> items = new ArrayList<>(); 

    for (String logs : Reader.read(App.purchaseLog, true) /* helper method */) { 
    String[] singleLog = convert(logs); /* helper method */ 

    items.add(new ArrayList<String>()); 

    for (String data : singleLog) { 
     String removeBrackets = data.replaceAll("\\[", "").replaceAll("\\]", ""); 

     String[] splitSingleLog = convert(removeBrackets.split(",")); 
     for (String element : splitSingleLog) { 
      String trimmedData = element.trim(); 
      items.get(0).add(trimmedData.substring(trimmedData.indexOf(':') + 2, trimmedData.length())); 
     } 
    } 
} 

    // But then how can i convert it to normal 2 dimensional array? 
    // i am expecting it to be like this 
    String[][] data = { 
     {"Foo", "Somewhere", "Somewhere"}, 
     {"Foo1", "Somewhere1", "Somewhere1"}, 
     {"Foo2", "Somewhere2", "Somewhere2"} 
    }; 
} 

public static String[] convert(String... array) { 
    return array; 
} 

がどのように私は、ループの各ArrayListのは、通常の配列にそれを変更することができますか? 私は配列にArrayListに変換するにはいくつかの例を見ましたが、それはあなたがマルチ薄暗い配列は、Javaでどのように機能するかを理解していないと思われ、主に1次元配列(Convert ArrayList<String> to String[] array

+0

誰がダウンして閉鎖を求めましたか?この質問は完全にSOの範囲にあります。 –

+0

@ Jean-BaptisteYunès明らかに、私はdownvote、クローズリクエストをしませんでした:しかし...最後に、この質問は基本的なことです。他のユーザーがこの記事を閉じるつもりはないと私は驚いていません。 – GhostCat

+0

私はあなたのためにこれを請求していませんでした...基本についても、特に初心者の方にはお答えする価値があります。 –

答えて

1

です。それらは実際のものではありませんマトリックス。配列の配列...は、別の1次元配列を保持する1次元配列を意味します。

List<Whatever>Whatever[]に変換するだけです。その後、あなたが行くと何かを行うことができます:動的

Whatever[][] twodim = { row1, row2 }; 

か:

List<List<String>> theStrings ... coming from somewhere 
String[][] stringsAsArray = new String[theStrings.length][]; 
for (int i=0; i<theStrings.length;i++) { 
    List<String> aList = theStrings.get(i); 
    stringsAsArray[i] = aList.toArray(new String[aList.size()]); 
} 

しかし:だから

Whatever[][] twodim = new Whatever[numberOfRows][]; 
twodim[0] = row1; 
twodim[1] = row2; 
... 

を、List<List<String>> 2次元の配列に変換するように動作します:なぜあなたはそれをしたいのですか?あなた自身が見るように、それらのマルチディムアレイは複雑です。リストと比較して非常に柔軟性がありません。あなたのデータを見てみましょう。問題は実際にはではなく、特定のタイプを使用しているです。

つまり、いくつかの「アイテム」のように概念上一緒に属する値がある場合は、 heck:一緒に属する値を保持できるItemクラスを作成します。代わりにList<List<String>>を扱う代わりに、あなたはList<Item>を代わりに扱っています!

これは問題を解決する方法です。 有用なオブジェクト指向モデルデータを作成します。本質的に、あなたは「どのように私は文字列と物のマルチディムアレイを作成するのですか」と尋ねるべきではありませんが、「どうすればそれを避けるのですか?」

+0

文字列の2D配列が必要なライブラリを使用している場合は、独自の構造を要求されたものに変換する必要があるかもしれません。だからあなたの答えは、元の質問に答えません。 –

+0

私はOPが彼の受け入れを取り除くことを望んでいませんが、あなたの答えはリストのリストを2D配列に変換する方法を説明していません。 –

+1

@ Jean-BaptisteYunèsOK、その部分も私の答えに加えました。 – GhostCat

1

最初にList<List<X>>List<X[]>に、その後X[][]に変換する必要があります。次のようなものがあります。

List<List<X>> listOfList = ...; 

List<X[]> listOfArray a = new ArrayList<X[]>(); 
for (List<X> listOfXx : listOfList) listOfArray.add(listOfX.toArray(new X[0])); // fill with arrays (from inner lists) 

X[][] arrayOfArray = listOfArray.toArray(new X[0][0]); 
+0

私はjava.lang.ClassCastExceptionを取得しています:[Ljava.lang.Object; [Ljava.lang.Stringにキャストできません – densityx

+0

変換に若干の変更が必要です...完了しました。一般的な変換が使用されているはずです。 –

関連する問題