2016-10-10 4 views
1

私は、 "mylist"という名前のjavaオブジェクトのArrayListを持っています。 私は文字列としてデータベースからリスト(mylist)の名前を取得しています。私はJAVAでこのリストのサイズを見つけ出し、それを反復処理する必要があります。リスト名が文字列として渡されるArrayListのサイズを調べる

これを行う方法はありますか?

編集: はこちらより明確にするために、私はクラスの「候補」

class Candidate { 

    String firstName; 
    String lastName; 
    List<Education>educationRecords; 
    ..... 
} 

class Education { 

    String school; 
    String degree; 
    ..... 
} 

を持っている私は、その構造候補オブジェクト(とは非常に異なっているので、使用することはできませんJSONObjectから候補オブジェクトを移入する必要がありますGsonまたはjackson)。

firstName、lastName、school、degreeのような単純なフィールドは、データベースに格納されます。

私はListfieldsをフェッチし、それらを反復して候補オブジェクトを設定します。 firstName、lastNameを設定するために、私はSpELを使用しています。

しかし、学校や学位などの分野では、JSONObjectの教育記録のサイズを知る必要があるため、複雑になります。

学校の分野が教育のクラスにある場合(反射を使用して)、すべてのフィールドを繰り返し処理していたと思ったのですが、私はeducationRecordsが候補クラスのListタイプであるかどうかを確認してから、変数名としてeducationRecordsを取る)を反復処理します。

ロジック「X」がありません。

+0

1.あなたが求めていることはかなり不明です。あなたの状況についてより具体的な詳細を含める必要があります。 2.私の最初の考えは、基本的に、とにかく、最良のアプローチを取っていない可能性が高いことです。これは奇妙なことです。あなたは座って、あなたの一般的なデザインを考え直したいかもしれません。 3.現在行っているようにしている場合は、[公式チュートリアルのリフレクション](https://docs.oracle.com/javase/tutorial/reflect/)を参照してください。それには限界がありますが、あなたに役立つかもしれません。また、switchステートメントでハックすることもできます。 –

+0

私は、あなたが 'ArrayList'を持っていて、そのサイズ、つまり要素の数を探したいと思いますか?なぜあなたは 'mylist.size()'を使わないのですか? –

+0

@TomášM。質問には次のような質問があります:OPには名前を持つArrayList変数があります。 OPはデータベースから文字列を取得します。オペレータは、変数名が検索された文字列と等しいArrayListにアクセスしたい。しかし、適切に答えるには十分な文脈がない。おそらくMap 、または大きなスイッチブロック、リフレクション、または再設計。 –

答えて

1

ここでの使用例はよくわかりません。しかし、私の理解では、ArrayList<Object> mylistがあり、DBから取得した文字列に基づいてそのサイズを見つける必要があります。

リストをキャッシュに格納することができます。ここで、キーはリストの名前で、値は実際のオブジェクトです。 redis、eh-cache、memcache(またはそれに類するもの)を使って同じことを達成することができます。

DBから名前を取得するときに、キャッシュから対応するオブジェクトを取得し、型キャストした後にオブジェクトに対してsize()を実行します。キャッシュにオブジェクト型ではなくリスト型を格納している場合、最後の部分は必要ありません(型キャスト)。

+1

これはおそらくリフレクションやBeanのプロパティなどより優れたアプローチです。これは、暗黙のうちにdbからの文字列をソートするためです。それはまたもっと簡単です。 –

0

あなたはマップを使用することができます。

Map<String, List> listMap = new Hashmap<>(); 

リストを作成するたびに - あなたのリストの名前であるキーでマップに追加します。名前を取得すると、地図にそのようなリストが存在するかどうかを簡単に確認し、取得し、サイズを確認し、繰り返します。さもなければあなたはそれらを守り、あなたの記憶を食べるでしょう。

関連する問題