如何使用属性从列表中获取提取对象?

时间:2013-06-17 16:00:33

标签: java list

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

Class1 A
List<Class2> B

我们有 -

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

我想获得B的元素,例如A.fieldX == C.fieldY

是否可以在不重复列表的情况下这样做?

2 个答案:

答案 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 );

只有在对象位于列表映射中时字段不会更改时才有效,只有在进行批量的情况下才有意义。