1

我有两种不同类型的两个对象:

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 回答