我有两种不同类型的两个对象:
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 );
这仅在对象位于列表映射中时字段不更改时才有效,并且只有在您进行大量查找时才有意义。