1

私はJavaとAndroidの開発が初めてで、次の問題に悩まされています。私のアプリは、次の方法で構造化したいデータベースからいくつかのデータを取得します。

DATA = 
{ 
  RESULT[0] = 
  {
    ARRAY[0]=
    {
      VALUE[0], ..., VALUE[X]
    },
    ARRAY[1] = 
    {
      VALUE[0], ..., VALUE[Y]
    },
    ...,
    ARRAY[N] = 
    {
      VALUE[0], ..., VALUE[Z]
    }
  },
  RESULT[1] =
  {
    /* Same as above */
  },
  ...,
  RESULT[M] =
  {
    /* Same as above */
  }
}

whereは各ごとにX, Y, ..., Z異なる場合がありますが、すべての場合は常に同じです。上記の構造から s を次のように読み取ることができるようにアクセスしたいと思いますARRAYRESULTNRESULTDATAARRAY

ListArray<String> array = readData(indexOfResult,indexOfArray);

ここで、indexOfResultは 0...M およびindexOfArray0...N です。

私はこれを試しました

Map<Integer,List<Map<Integer,ArrayList<String>>>> data
 = new HashMap<Integer,List<Map<Integer,ArrayList<String>>>>();

しかし、おそらくもっと簡単なものが仕事をすることができますか?

4

4 に答える 4

1

オブジェクト構造の各レベルを、それを表すクラスでラップする方が適切です。例えば:

  • クラスDataには、クラスの配列 (または配列リスト) が含まれていResult ます。
  • Resultの配列 (または配列リスト) がValueCollection含まれており、値が含まれています。

それは単なる生の提案です。この種の状況に直面したときは、常に、メイン コンテナーから始まり、コレクションやフィールドで表現できる小さなデータに至るまで、全体像のさまざまなレベルを表すクラスを定義するようにしてください。

自分でデザインを考え (コード上で直接思いつくことができない場合は、常にペンと紙をお勧めします)、試してみてください。それは学ぶための最良の方法です。

于 2012-12-12T17:57:53.357 に答える
0

いくつかのオプションがあります:

Map<Integer,List<String[]> result;

また

List<List<String[]> result;

また

List<List<List<String>>> result;

あるいは

String[][][] result;

...使用方法と好みによって異なります。

于 2012-12-12T18:02:36.560 に答える
0

すべてをパラメータ化するのではなく、表示しようとしているものを表すいくつかのクラスを作成する必要があります。

例えば

class Example implements Map<Integer, List<String>> {
...
}

または、自分のやり方でやりたい場合:

Map<Integer,List<Map<Integer,ArrayList<String>>>> data = new HashMap<Integer,List<Map<Integer,ArrayList<String>>>>();

List<Map<Integer,ArrayList<String>>> list1 = new Arraylist<Map<Integer,ArrayList<String>>>();
Map<Integer,ArrayList<String>> map1 = new HashMap<Integer,ArrayList<String>>();
ArrayList<String>> list2 = new ArrayList<String>>();

list2.add("test");
map1.add(1, list2);
list1.add(map1);

data.put(1, list1);

次に、データ構造からこのデータを取得するメソッドを作成する必要があります。ただし、常にできるだけ単純なコードを作成し、理解しやすいようにすべてを構造化する必要があります。

于 2012-12-12T18:00:34.070 に答える