GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Unir 2 arrays somando uma variavel

java
arraylist
Tags: #<Tag:0x00007f18658a36d8> #<Tag:0x00007f18658a2fa8>

#1

Boa tarde Pessoal, alguem sabe resolver isso!!

Eu tenho 2 arrays do objeto Agregado por exemplo:

Agregado = {codigoVendedor: number; nomeVendedor: string, quantidadeVendida: number};

agregados1 = [{01, ‘Joao’, 50}, {02, ‘Maria’, 20}];

agregados2 = [{01, ‘Joao’, 20}, {02, ‘Maria’, 10}, {03, ‘Pedro’, 15}];

Eu preciso que faça um comando para unir eles somando, ficando desta maneira:

resultado = [{01, ‘Joao’, 70}, {02, ‘Maria’, 30}, {03, ‘Pedro’, 15}];

Se alguem puder me ajudar,

Obrigado


#2

faz 2 for each, quando o códigoVendedor do objeto do agregados1 for igual ao objeto do agregados 2 você soma e adiciona em uma nova Arraylist, só cria uma condição para verificar se essa nova ArrayList já não contêm um elemento com esse codigoVendedor.


#3

Boa tarde amigo. Espero que te ajude

public void test() {
    //agregados1 = [{01, ‘Joao’, 50}, {02, ‘Maria’, 20}];
    Agregado[] agregados1 = {new Agregado(1, "Joao", 50), new Agregado(2, "Maria", 20)};
    //agregados2 = [{01, ‘Joao’, 20}, {02, ‘Maria’, 10}, {03, ‘Pedro’, 15}];
    Agregado[] agregados2 = {new Agregado(1, "Joao", 20), new Agregado(2, "Maria", 10), new Agregado(3, "Pedro", 15)};
    //Eu preciso que faça um comando para unir eles somando, ficando desta maneira:
    Agregado[] resultado = somarAgregado(agregados1, agregados2);
    //resultado = [{01, ‘Joao’, 70}, {02, ‘Maria’, 30}, {03, ‘Pedro’, 15}];
    Arrays.asList(resultado).forEach(ag -> System.out.println(ag.toString()));
}

public Agregado[] somarAgregado(Agregado[] agregados1, Agregado[] agregados2) {
    //cria lista para recolher os resultados
    List<Agregado> lista = new ArrayList();
    //inverte as listas para que a primeira seja sempre a maior
    if (agregados1.length < agregados2.length) {
        Agregado[] temp = agregados1;
        agregados1 = agregados2;
        agregados2 = temp;
    }
    //loop que passa toda a lista 1
    l1:
    for (Agregado ag1 : agregados1) {
        //loop que passa toda a lista 2
        for (Agregado ag2 : agregados2) {
            //verificação de igualdade entre os objetos
            if (ag1.getCodigoVendedor().equals(ag2.getCodigoVendedor())
                    && ag1.getNomeVendedor().equals(ag2.getNomeVendedor())) {
                //cria novo objeto e soma as quantidades adicionando a lista
                Agregado nag = new Agregado();
                nag.setCodigoVendedor(ag1.getCodigoVendedor());
                nag.setNomeVendedor(ag1.getNomeVendedor());
                nag.setQuantidadeVendida(ag1.getQuantidadeVendida().doubleValue() + ag2.getQuantidadeVendida().doubleValue());
                lista.add(nag);
                //volta para o primeiro loop
                continue l1;
            }
        }
        //adiciona objeto que não existir na segunda lista
        lista.add(ag1);
    }
    //retorna lista transformada em array contendo o resultado
    return lista.toArray(new Agregado[lista.size()]);
}

public class Agregado {

    private Number codigoVendedor;
    private String nomeVendedor;
    private Number quantidadeVendida;

    public Agregado() {
    }

    public Agregado(Number codigoVendedor, String nomeVendedor, Number quantidadeVendida) {
        this.codigoVendedor = codigoVendedor;
        this.nomeVendedor = nomeVendedor;
        this.quantidadeVendida = quantidadeVendida;
    }

   //Getters and Setters

    @Override
    public String toString() {
        return "Agregado{" + "codigoVendedor=" + codigoVendedor + ", nomeVendedor=" + nomeVendedor + ", quantidadeVendida=" + quantidadeVendida + '}';
    }

}

#4

Muito obrigado… Villagram