Help + Dificuldade na Lógica

4 respostas
R

Galera,

Preciso resolver uma lógica que dada uma String, tenho que desmontá-la e criar objetos, porém qdo um determinado atributo for igual a um outro não preciso criar o objeto duas vezes, o exemplo seria mais ou menos assim

String qlqCoisa = "ProdutoXXX,PesoXXX,TANQUE,"+ "ProdutoZZZ,PesoZZZ,CILINDRO,"+ "ProdutoYYY,PesoYYY,TANQUE";
Ou seja, após desmontar essa String tenho 3 registros, porém o terceiro campos do terceiro registro(TANQUE), é igual o Primeiro(TANQUE), ou seja não preciso criar o terceiro Objeto,

Como posso resolver essa lógica

4 Respostas

israelwm

Não sei se entendi, mas vamos ver…

ai vc desmonta a String e quando pegar o 3o. campo não tem como vc verificar em todos os outros objetos para ver se ele naum existe? Dai se existisse um com mesmo nome vc simplesmente não precisa criar o objeto.

R

Isso mesmo,

mas como devo fazer isso???,

israelwm

Bom eu naum sei como vc está fazendo, mas faz uma comparação se strings

//campo3 e campo3atual é String

if objeto1.campo3.equal(campo3atual) {

}
_fs

Vou chutar que o nome do objeto que você vai montar de chama Produto, e a classe dele se dá assim:

public class Produto()
{
    private String name;
    private double peso;
    private String tipo;

    public Produto( String name, Double peso, String tipo )
    {
        this.name = name;
        this.peso = peso;
        this.tipo = tipo;
    }

    public String getTipo() { return tipo; }

    public boolean equals( Object obj )
    {
        if( obj instanceof Produto )
        {
            Produto p = ( Produto ) obj;
            if( p.getTipo().equals( tipo ) )
                return true;
        }

        return false;
    }
}

public static void main( String args[] )
{
    // mudei o delimitador para ';'
    String qlqCoisa = "ProdutoXXX,PesoXXX,TANQUE;"+
                           "ProdutoZZZ,PesoZZZ,CILINDRO;"+
                           "ProdutoYYY,PesoYYY,TANQUE";
    String[] dados = qlqCoisa.split( ";" );
    List produtos = new ArrayList();
    for( int i = 0; i < dados.length; i++ )
    {
        String[] row = dados[ i ].split( "," );
        Produto p = new Produto( row[ 0 ], row[ 1 ], row[ 2 ] );
        if( !produtos.contains( p ) )
                produtos.add( p );
    }
}

Explicando: o método equals da classe Produto retorna que um objeto Produto é igual ao outro se ambos tiverem o mesmo TIPO. Sendo assim, ao perguntar

produtos.contains( p )

é retornado true se a List já contém um objeto Produto que tem o mesmo TIPO que o produto passado na chamada do método ( contains§ ). Se a List já tiver um, não adiciono, caso contrário, sim.

Criado 29 de março de 2005
Ultima resposta 29 de mar. de 2005
Respostas 4
Participantes 3