私は2つの異なるタイプの2つのオブジェクトを持っています:
Class1 A
List<Class2> B
そして、私たちは -
Class2 C = new Class2();
B.add(C);
などの B の要素を取得したいA.fieldX == C.fieldY
。
リストを反復せずにそうすることは可能ですか?
なんらかの繰り返しなしにリストでこれを行うことはできませんが、マッピングに変更する場合は、次のコードで回避できます。
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 関数を使用するだけです。別のマップ タイプを使用することもできますが、それはあなたとコードの設計次第です。
オブジェクトがリストにある間にフィールドが変更されない場合は、コレクション (または、必要に応じてリストまたはセット) のマップを使用して、この比較を容易にすることができます。
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 );
これは、オブジェクトがリストのマップにある間にフィールドが変更されない場合にのみ機能し、これらのルックアップを頻繁に行う場合にのみ意味があります。