¿Hay alguna forma de comprobar si dos colecciones contienen los mismos elementos, independientemente del orden?
He estado buscando un método que funcione como Arrays.equals(a1, a2)
, pero ignorando el orden de los elementos. No he podido encontrarlo ni en las Colecciones de Google (algo así como Iterables.elementsEqual()
, pero eso sí cuenta para realizar pedidos) ni en JUnit ( assertEquals()
obviamente solo llama equals()
a la Colección, que depende de la implementación de la Colección, y eso no es lo que quiero). Sería mejor si dicho método tomara Iterable
s, pero también estoy de acuerdo con simplemente tomar Collection
s. Dicho método, por supuesto, tendría en cuenta cualquier elemento duplicado en la colección (por lo que no puede simplemente probar containsAll()
).
Tenga en cuenta que no estoy preguntando cómo implementar tal cosa, solo me preguntaba si alguna de las bibliotecas de Colecciones estándar lo tiene.
Apache commons-collections tiene CollectionUtils#isEqualCollection :
Devuelve verdadero si las Colecciones dadas contienen exactamente los mismos elementos con exactamente la misma cardinalidad.
Es decir, si la cardinalidad de e en a es igual a la cardinalidad de e en b, para cada elemento e en a o b.
Que es, creo, exactamente lo que buscas.
Se trata de tres llamadas a métodos y utiliza Google Collections Guava , pero posiblemente sea tan simple como parece:
HashMultiset.create(c1).equals(HashMultiset.create(c2));
Crear los Multiset
correos electrónicos temporales puede parecer un desperdicio, pero para comparar las colecciones de manera eficiente es necesario indexarlas de alguna manera.