Para peritos em string [resolvido]

9 respostas
Algebra

como faço para obter a diferença entre 2 arrays?

exemplo:

array1.add("bolo");
array1.add("cafe");
array1.add("cha");

array2.add("bolo");
array2.add("cafe");
array2.add("pao");

resultado esperado = “cha,pao”

9 Respostas

walissongpi
ArrayList<String> array1 = new ArrayList<String>();
        ArrayList<String> array2 = new ArrayList<String>();
        ArrayList<String> array3 = new ArrayList<String>();
        array1.add("bolo");
        array1.add("cafe");
        array1.add("cha");

        array2.add("bolo");
        array2.add("cafe");
        array2.add("pao");

         for(int i=0;i<array1.size();i++){
            if(!array1.get(i).equals(array2.get(i))){
                array3.add(array1.get(i));
                array3.add(array2.get(i));

            }
         }
        
        for(String s: array3)
            System.out.println(s);

era só isso mesmo?

renzonuccitelli

Ou então utilize o método remove da lista…

renzonuccitelli

Tb tinha outro método que já fazia a interseção automáticamente, só dar uma procurada nos métodos. Dica: quando kiser fazer algo, apenas veja o autocomplete dos métodos em sua IDE que muitas vezes vc já encontra a resposta.

walissongpi

realmente é mais prático. Não tinha pensado nessa possibilidade. Valeu! :wink:

Algebra

que método é esse que faz intersecção automática?

Algebra

walissongpi seu método não funciona se “cha” e “pao” estiverem numa posição aleatória do indice:

ex:

array1.add("bolo");  
array1.add("cha");  
array1.add("cafe");  
  
array2.add("bolo");  
array2.add("cafe");  
array2.add("pao");
walissongpi
Algebra:
walissongpi seu método não funciona se "cha" e "pao" estiverem numa posição aleatória do indice:

ex:

array1.add("bolo");  
array1.add("cha");  
array1.add("cafe");  
  
array2.add("bolo");  
array2.add("cafe");  
array2.add("pao");

hum... Pensei nisso tbm, mas como não foi reletado isso, não fiz. Mas resolveria de maneira fácil colocando mais um comando for.

Algebra

vlw pelas dicas pessoal, mas eu consegui resolver utilizando esta função que desenvolvi, cheia de variaveis

kkkkk

public static List<String> difference(List<String> l1,List<String>  l2){
        List <String> resp  = new ArrayList<String>();
        List <String> aux   = new ArrayList<String>();

        for(int i=0;i<l1.size();i++){
            for (int j=0;j<l2.size();j++){
            if (l1.get(i).equalsIgnoreCase(l2.get(j))){
                if (!aux.contains(l2.get(j).toString()))
                aux.add(l1.get(i));
            }
        }
        }
        resp.addAll(l1);
        resp.addAll(l2);
        resp.removeAll(aux);

        return resp;
    }
andeb

Podes fazer algo do tipo também:

public static Collection differences(Collection coll1, Collection coll2) {
    Collection result = new ArrayList();
    result.addAll(subtract(coll1, coll2));
    result.addAll(subtract(coll2, coll1));
    return result;
}

public static Collection subtract(Collection coll1, Collection coll2) {
    Collection result = new ArrayList(coll2);
    result.removeAll(coll1);
    return result;
}

public static void main(String[] args) throws ScriptException, IOException {

        List<String> array1 = Lists.newArrayList();
        array1.add("bolo");
        array1.add("cafe");
        array1.add("cha");

        List<String> array2 = Lists.newArrayList();
        array2.add("bolo");
        array2.add("cafe");
        array2.add("pao");

        Collection subtract = differences(array1, array2);

        System.out.println(subtract); // [pao, cha]

}
Criado 13 de fevereiro de 2010
Ultima resposta 14 de fev. de 2010
Respostas 9
Participantes 4