2017-09-22 2 views
0

Je dois comparer deux collections à l'aide d'Apache CollectionUtils.isEqualCollection. Ils sont ont la même interface Compress et une méthode pour comparer:Comparaison de deux collections à l'aide d'Equator dans CollectionUtils.isEqualCollection

public boolean isTheSame(Compress compr); 

Mais je n'ai pas une idée, comment ajouter un équateur à mon code.

De la documentation:

isEqualCollection(Collection<? extends E> a, Collection<? extends E> b, Equator<? 
super E> equator) 
Returns true iff the given Collections contain exactly the same elements with exactly the same cardinalities. 

Mon code:

return CollectionUtils.isEqualCollection(filtLst3, filtLst4, equator); 

Dois-je mettre les méthodes dans mes classes de collection de l'Equateur? Ou peut-être que je devrais écrire quelque chose comme ça (pas de code de travail):

... 

    Eq equator = new Eq<Compress>(); 
    return CollectionUtils.isEqualCollection(filtLst3, filtLst4, equator); 
} 

public static class Eq<Compress> implements Equator { 

    public boolean equate(Object o1, Object o2) { 
     Compress c1 = (Compress) o1; 
     Compress c2 = (Compress) o1; 

     return c1.isTheSame(c2); 
    } 

    public int hash(Object o) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

} 

je vais vraiment apprécier toute aide!

+0

Que voulez-vous dire par 'Dois-je mettre les méthodes de l'Equateur dans ma collection classes'? – Dimitri

+0

Je veux dire, devrais-je faire en sorte que mes classes implémentent Equator? – Lev

+0

Avez-vous le choix? – Dimitri

Répondre

1

Voici un exemple:

public boolean isTheSame(Collection<? extends Compress> a, Collection<? extends Compress> b) { 
     Equator<Compress> compressEquator = new CompressEquator(); 
     return CollectionUtils.isEqualCollection(a, b, compressEquator); 
} 

    public static class CompressEquator implements Equator<Compress> { 

    public boolean equate(Compress c1, Compress c2) { 
     return c1.isTheSame(c2); 
    } 
    // 
    } 
}