1

私は2つの異なるタイプの2つのオブジェクトを持っています:

Class1 A
List<Class2> B

そして、私たちは -

Class2 C = new Class2();
B.add(C);

などの B の要素を取得したいA.fieldX == C.fieldY

リストを反復せずにそうすることは可能ですか?

4

2 に答える 2

1

なんらかの繰り返しなしにリストでこれを行うことはできませんが、マッピングに変更する場合は、次のコードで回避できます。

Map<FieldYType, Class2> B= new HashMap();
B.put(c.fieldY, C);
Class2 D = B.get(A.fieldX);
D==C;//true
D.fieldY==A.fieldX;//true

したがって、ここではまったく反復せず、単一の get 関数を使用するだけです。別のマップ タイプを使用することもできますが、それはあなたとコードの設計次第です。

于 2013-06-17T16:13:51.547 に答える
1

オブジェクトがリストにある間にフィールドが変更されない場合は、コレクション (または、必要に応じてリストまたはセット) のマップを使用して、この比較を容易にすることができます。

Map<Field, List<Class2>> map = new HashMap<>();

挿入するには:

Class2 c = new Class2();

List<Class2> bucket = map.get(c.fieldY);
if( null == bucket ){
    bucket = new ArrayList<>();
    map.put( c.fieldY, bucket );
}
bucket.add( c );

見上げる:

List<Class2> result = map.get( a.fieldX );

これは、オブジェクトがリストのマップにある間にフィールドが変更されない場合にのみ機能し、これらのルックアップを頻繁に行う場合にのみ意味があります。

于 2013-06-17T16:27:24.343 に答える