2013-11-07 15 views
0

У меня есть два списка массивов типа CRVariable (hibernate class), и я хочу найти их общие элементы (пересечение, я думаю).найти общие элементы в двух списках

Вот мой CRVariable класс спящего режима:

@Entity 
@Table(name = "imageviewer_crvariable") 
public class CRVariable implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @Column(name = "VarId") 
    private Long varId; 

    @Column(name = "VarName", unique=true) 
    private String varName; 

    @Column(name = "VarDescription") 
    private String varDescription; 

    private String state; 

    @ManyToMany(mappedBy="crvariables") 
    private Set<CRImageType> crimagetypes = new HashSet<CRImageType>(); 

    @OneToMany(mappedBy="cRVariable") 
    private Set<CRFormField> cRFormFields; 
     .... 

Так я пытаюсь использовать Collection # retainAll() метод следующим образом:

... 
List<CRVariable> variablesForCurrentImageType = new ArrayList<CRVariable>(); 
variablesForCurrentImageType = getCRVariablesForImageType(mySelectedImages.get(k)); 
... 
List<CRVariable> mySelectedVariables = Arrays.asList(selectedVariables); 
... 
Collection<CRVariable> colA1 = new ArrayList<CRVariable>(); 
colA1.addAll(mySelectedVariables); 

Collection<CRVariable> colB1 = new ArrayList<CRVariable>(); 
colB1.addAll(variablesForCurrentImageType); 
... 
if(colA1.size()>colB1.size()){ 
    colA1.retainAll(colB1); //intersection 
    System.out.println(">>>> INTERSECTION SIZE: " + colA1.size()); 
} else { 
    colB1.retainAll(colA1); //intersection 
    System.out.println(">>>> INTERSECTION SIZE: " + colB1.size()); 
} 
... 

, но в зависимости от того комбинация, если я пытаюсь я всегда получайте colA1 или colB1 с нулем (0)!

любые идеи о том, что я отсутствовал?

+0

У вас есть переопределенные равные и хэш-коды правильно? –

+0

любая помощь по этому поводу? я думаю, нет! – thanili

ответ

1

Возможно, вы неправильно используете equals().

Метод saveAll() не может автоматически знать, какие объекты равны, поэтому вам придется это предоставить.

+0

Вы имеете в виду класс CRVariable? реализовать свойство equals()? – thanili

+0

Да. Если они являются сущностями JPA, вы можете просто проверить, что они являются одним и тем же классом, и что их первичный ключ совпадает. При условии, что вы используете объекты, у которых уже установлены свои первичные ключи. – Kayaman

+0

да на самом деле проблема связана с тем, что у меня есть один первичный (VarId) и дополнительный уникальный ключ (VarName) ... – thanili

Смежные вопросы