es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo comparar conjuntos sin comparar el contenido.

Tengo dos conjuntos con elementos de mi clase Capability.

public class Capability {
private String name;

public Capability(){
    //
}

public Capability(String name){
    this.name = name;
    //this.id = count.getAndIncrement();
}

public String getName(){
    return name;
}

@Override
public String toString(){
    return "Capability: "+name+".";
}

}

Por favor, ignore el valor de esta clase sobre una cadena, esto es para una expansión futura.

Estoy tratando de comparar dos conjuntos que he obtenido al importar un archivo json, por lo que no son el mismo objeto, ni contienen el mismo objeto, simplemente tienen el mismo contenido.

public boolean allCapabilitiesMet(){
int count = 0;
for(Capability taskCap : this.getReqCapabilities()){
for(Capability primCap : this.getPrimitive().getCapabilities())
{
System.out.println(taskCap.equals(primCap));
System.out.println(taskCap.getName().equals(primCap.getName()));
if(taskCap.equals(primCap)){
count++;
}
}
}
return count == this.getReqCapabilities().size();
//return this.getPrimitive().getCapabilities().containsAll(this.getReqCapabilities());
}

El objetivo es ver si un conjunto es un subconjunto del otro, lo cual podría hacer con el retorno comentado antes de cambiar a la importación del archivo json.

La cosa es que podría arreglar esto ahora simplemente cambiando la cláusula if por la comparación de cadena, porque eso funciona de hecho. Esto sería terrible una vez que empiece a agregar otros campos a la clase principal.

¿Hay algo que pueda hacer para comparar el contenido de los conjuntos sin verificar manualmente su contenido?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Java y comparación de conjuntos, sugeriría utilizar el método containsAll() en uno de los conjuntos para comprobar si contiene todos los elementos del otro conjunto. Aquí hay un ejemplo:

    Set<capability> set1 = ... // Primer conjunto importado de un archivo JSON
    Set<capability> set2 = ... // Segundo conjunto importado de un archivo JSON
    
    boolean esSubconjunto = set1.containsAll(set2);
    
    // Alternativamente, se puede comprobar si set2 es un subconjunto de set1
    boolean esSubconjunto2 = set2.containsAll(set1);
    

    Ambos de estos métodos devolverán true si set2 es un subconjunto de set1, y false de lo contrario. Esta es una forma más eficiente y genérica de comparar conjuntos sin comprobar manualmente sus contenidos.

Comments are closed.