我有两个不同类型的两个对象:
Class1 A
List<Class2> B
我们有 -
Class2 C = new Class2();
B.add(C);
我想获得B的元素,例如A.fieldX == C.fieldY
。
是否可以在不重复列表的情况下这样做?
答案 0 :(得分: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函数。您可能还想使用不同的地图类型,但这取决于您和您的代码设计。
答案 1 :(得分: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 );
只有在对象位于列表映射中时字段不会更改时才有效,只有在进行批量的情况下才有意义。