videos san música musica isidro honduras cuerdas cuerda conjunto choluteca chanchona java

java - san - música de cuerdas



¿Hay una mejor manera de combinar dos conjuntos de cuerdas en java? (9)

Necesito combinar dos conjuntos de cadenas mientras filtrado la información redundante, esta es la solución que se me ocurrió, ¿hay alguna manera mejor que cualquiera pueda sugerir? Tal vez algo construido en lo que pasé por alto? No tuve suerte con google.

Set<String> oldStringSet = getOldStringSet(); Set<String> newStringSet = getNewStringSet(); for(String currentString : oldStringSet) { if (!newStringSet.contains(currentString)) { newStringSet.add(currentString); } }


A partir de la definición, Set contiene solo elementos únicos.

Set<String> distinct = new HashSet<String>(); distinct.addAll(oldStringSet); distinct.addAll(newStringSet);

Para mejorar su código, puede crear un método genérico para ese

public static <T> Set<T> distinct(Collection<T>... lists) { Set<T> distinct = new HashSet<T>(); for(Collection<T> list : lists) { distinct.addAll(list); } return distinct; }


Como un Set no contiene entradas duplicadas, puede combinar las dos por:

newStringSet.addAll(oldStringSet);

No importa si agrega cosas dos veces, el conjunto solo contendrá el elemento una vez ... por ejemplo, no es necesario verificar usando el método contains .


Lo mismo con Guava :

Set<Sting> combinedSet = Sets.union(oldStringSet, newStringSet)


Puedes hacerlo usando este one-liner

Set<String> combined = Stream.concat(newStringSet.stream(), oldStringSet.stream()) .collect(Collectors.toSet());

Con una importación estática, se ve aún mejor

Set<String> combined = concat(newStringSet.stream(), oldStringSet.stream()) .collect(toSet());

Otra forma es usar el método flatMap :

Set<String> combined = Stream.of(newStringSet, oldStringSet).flatMap(Set::stream) .collect(toSet());

También cualquier colección podría combinarse fácilmente con un solo elemento

Set<String> combined = concat(newStringSet.stream(), Stream.of(singleValue)) .collect(toSet());


Solo use newStringSet.addAll(oldStringSet) . No es necesario comprobar si hay duplicados, ya que la implementación de Set ya lo hace.


Use boolean addAll(Collection<? extends E> c)
Agrega todos los elementos de la colección especificada a este conjunto si aún no están presentes (operación opcional). Si la colección especificada también es un conjunto, la operación addAll modifica de manera efectiva este conjunto de modo que su valor sea la unión de los dos conjuntos. El comportamiento de esta operación no está definido si la colección especificada se modifica mientras la operación está en progreso.

newStringSet.addAll(oldStringSet)



Set.addAll()

Agrega todos los elementos de la colección especificada a este conjunto si aún no están presentes (operación opcional). Si la colección especificada también es un conjunto, la operación addAll modifica de manera efectiva este conjunto de modo que su valor sea la unión de los dos conjuntos

newStringSet.addAll(oldStringSet)


newStringSet.addAll(oldStringSet);

Esto producirá Unión de s1 y s2