-3

オブジェクトの配列のリストがあります....各配列には4つのオブジェクトがあります。

完全なリストを読み、要素 [1] に同じ値を持つすべての配列を別のリストに入れる必要があります。

どうやってするの?

たとえば、リスト「データ」があります

次のようなオブジェクトの配列の n 番目の数を持ちます

array[0]
array[1]
array[2]
⋮ 
array[n]

各配列には 4 つの値があります

array[0] has 0,23,BD,100
array[1] has 1,23,FG,200
array[2] has 3,34,GH,400
array[3] has 8,87,UJ,600
⋮ 
array[n] has 98,23,KM,9000

それらはすべて同じ値を持っているので、今array[0], array[1] and array[n]は同じものを入れる必要がありますlist(List1)'element 2' i-e '23'

それらのように同様の「要素2」を持つ他の配列がないため、別の場所と別の場所にarray[2]ありますlist(List2)array[3]list(List3)

すべての配列はオブジェクト型です。

4

1 に答える 1

1

1 つ以上のテーブルから属性のサブセットを選択しているため、このような値を取得していると思いました。実際、最終的には type の配列のリストになりますObject。これは、各属性が独自の型を持っているためです。このような未定義の状況を処理できる共通のスーパータイプはObjectそれ自体です。

ここで取ることができるアプローチは 2 つあります。1 つはデータベースとの対話を強化する必要があり、もう 1 つは取得したばかりのデータを準備するために、このクエリ チューニングを追加の処理に置き換えます。

オプション 1: クエリをもう少しパラメーター化する

クエリに別の条件を追加します。ここで、その 2 番目の属性 (element 2名前を付けたとおり) を定義します。クエリには、次の追加条件があります。

AND element2 = :element2

このようにelement 2して、データのクエリを実行するタイミングを決定し、関連データの各サブセットを直接取得できます。このアプローチでは、取得する値と、値と同じ数のクエリに関する事前の知識が必要です。

値は、単純なクエリで取得できます。

SELECT DISTINCT(element2) FROM <YOUR_TABLES_HERE>

クエリを実行するたびにListObject[]が取得されますが、今回は の値がすべて同じになりますelement 2

オプション 2: 取得したデータを処理する

クエリを変更できない場合 (または、何らかの理由で異なる値element 2が取り得る簡単な方法がない場合) は、データベースから取得したばかりの生データを処理する必要があります。

Mapaといくつかの sを混ぜることをお勧めしますListelement 2が配列のインデックスの下にあると仮定すると1、そのリストを反復処理し、値を確認してマップに追加する必要があります。

Map<Long, List<Object[]>> queriedResultsMap = new HashMap<Long,List<Object[]>>();
//Iterate over the obtaines database values
for(Object[] currentArray : yourListOfObject) {
    if(!queriedResultsMap.containsKey(currentArray[1])) {
        //No element with that value for "element 2" is on the map yet,
        //so a new container (List) is created.
        queriedResultsMap.put(currentArray[1],new ArrayList<Object[]>());
    }
    //Adds the element to the associated list.
    queriedResultsMap.get(currentArray[1]).add(currentArray);
}

element 2この単純なコードは、配列の現在のリストを繰り返し処理し、それらのそれぞれを、マップのキーである値に関連付けられたリストに追加します。このマップでは、キーは の値でelement 2あり、関連する値はListに対応する値が設定されているすべての検出されたレジストリを含む ですelement 2

このifステートメントは、 の新しい値に遭遇するたびに新しいリストを作成し、element 2それをその値に関連付けます。

最後に、データを使用するには、次のようにします。

queriedResultsMap.get(element2Value);

element2Value結果を取得する値が含まれる場所。マップによって返されるリストには、特定の値 を持つすべての結果が含まれますelement 2。リストが返されない (getメソッドが を返すnull) 場合は、実行したクエリが の値に対して結果を返さなかったことがわかりますelement 2

マップを使用すると、見つかった各値を直接関連付けることができelement 2、取得したすべての値を直接把握できると同時に、特定の値が取得されたかどうかを即座に確認できます。element 2のどの値が見つかったかを正確に知るにkeySetは、マップの を取得し、特定の値が取得されたかどうかを知るには のcontainsKeyメソッドを使用しMapます。

最適な方法を使用してください。

于 2013-03-27T18:23:17.237 に答える