Não consigo somar um array [Resolvido]

6 respostas
javaarraylist
A

Boa tarde galera.

E uma dúvida básica mais eu não consegui resolver com os tópicos já existentes.

Eu tenho um array na qual eu quero passar para ele vários valores do tipo float, e somar eles.
O objetivo e calcular o total de impostos.

ArrayList<funcionario> totalImposto = new ArrayList<>();
        totalImposto.add(new funcionario(fun.inss, fun.seguroVida, fun.refeicao, fun.transporte));
        float soma = 0;
        soma += (float)totalImposto;

Minha classe funcionario tem os construtores e gets feitos.

O erro que ocorre e incompatible types: ArrayList cannot be converted to float

Tentei de outras formas, mas da o mesmo erro, ou da um erro referente ao operador +.

6 Respostas

D

Há um erro no teu entendimento a respeito do objeto da classe ArrayList.
Sendo bem direto, os objetos da classe ArrayList armazenam valores e possuem alocação dinâmica de memória. Porém, você só consegue obter o valor inserido se “disser” ao java de forma explícita qual a posição que está acessando,
Para resolver teu problema, use o for:
for(int i = 0; i < totalImposto.size(); i++){ soma += totalImposto.get(i); }

R

+1

S

Se observar a implementação do colega @Alancristi1, vai perceber que ele possui uma lista de objetos do tipo funcionario (que deveria ser renomeada pra Funcionario)
A linha “soma += totalImposto.get(i);” vai causar "incompatible types: funcionario cannot be converted to float"
Afinal, um objeto do tipo funcionario não é um tipo primitivo float.

Nesse caso, não seria mais prático fazer conforme abaixo?

List<Float> totalImposto = new ArrayList<>();
float soma = fun.inss + fun.seguroVida + fun.refeicao + fun.transporte;
totalImposto.add(soma);
L

Você pode usar streams primitivas no Java 8 para fazer a soma dos valores dentro de coleções, se quiser. Um exemplo básico:

List<Double> valores = asList(1d, 2d, 3d);
double soma = valores.stream().mapToDouble(Double::doubleValue).sum();
// soma resulta em 6

Se você quiser somar os valores que os funcionários da lista tem, pode fazer assim:

List<Funcionario> funcionarios = ...;
double soma = funcionarios.stream().mapToDouble(Funcionario::getValor).sum();
// soma resulta na soma dos valores retornados por getValor()
// em todos os funcionários

Ou ainda

double soma = funcionarios.stream().mapToDouble(func -> {
    return func.getValor1() + func.getValor2() + etc;
}).sum();

Dá uma olhada na API de Streams do Java 8 :slight_smile:

R

Existem diversas formas para realizar a soma de arrays. Essa é uma delas.

ArrayList<Funcionario> lista = new ArrayList<>();
	lista.add(new Funcionario(400, 300, 200, 100));
	lista.add(new Funcionario(500, 350, 270, 150));
	
	double soma = 0;
	
	for(Funcionario funcionario: lista){
		soma+= funcionario.getInss() + funcionario.getRefeicao() + 
			   funcionario.getSeguroVida() + funcionario.getTransporte();
	}
	
	
	System.out.println("Soma " + soma);

Esse é um meio de resolver. Outro meio dentre vários outros:

ArrayList<Funcionario> lista = new ArrayList<>();
	lista.add(new Funcionario(400, 300, 200, 100));
	lista.add(new Funcionario(500, 350, 270, 150));
	
	Stream<Funcionario> streamFuncionario = lista.stream();
	
	DoubleSummaryStatistics doubleStat = streamFuncionario.mapToDouble(func -> 
	func.getRefeicao() + func.getInss() + func.getSeguroVida() + func.getTransporte()).summaryStatistics();
	
	
	System.out.println(doubleStat.getSum());
	System.out.println(doubleStat.getMax());
	System.out.println(doubleStat.getMin());

Espero ter ajudado.

A

Utilizei a stream(), pois não conhecia a mesma.

Criado 30 de janeiro de 2017
Ultima resposta 1 de fev. de 2017
Respostas 6
Participantes 6