studio - java swing tutorial pdf español
¿Hay alguna manera de verificar si dos colecciones contienen los mismos elementos, independientemente del orden? (3)
Las colecciones comunes de Apache tienen 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 aob.
Que es, creo, exactamente lo que buscas.
He estado buscando un método que funcione como Arrays.equals(a1, a2)
, pero ignorando el orden de los elementos. No he podido encontrarlo en Google Collections (algo así como Iterables.elementsEqual()
, pero eso explica el pedido) y JUnit ( assertEquals()
obviamente solo llama a equals()
en la Colección, que depende de la Colección implementación, y eso no es lo que quiero) Sería mejor si tal método tomara Iterable
s, pero también estoy bien con simplemente tomar Collection
s Este método, por supuesto, tomaría en cuenta cualquier elemento duplicado en la colección (por lo tanto no puede simplemente probar para 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.
Se trata de tres llamadas a métodos y utiliza Google Collections Guava , pero es posible que sea lo más simple posible:
HashMultiset.create(c1).equals(HashMultiset.create(c2));
La creación de Multiset
temporal s puede parecer un desperdicio, pero para comparar las colecciones de manera eficiente necesita indexarlas de alguna manera.
Si quiere ignorar el orden, ¿qué hay de los conjuntos de prueba para la igualdad?
new HashSet(c1).equals(new HashSet(c2))