Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Estou com dúvida no curso de Design Patterns para bons programadores, no exercício do capítulo Códigos parecidos e o Template Method.

/**
 *
 * @author Gilberto
 */
public class IHIT implements Imposto {

    @Override
    public double calcula(Orcamento orcamento) {
        if (itemComMesmoNome(orcamento)) {
            return ((orcamento.getValor() * 13) / 100) + 100;
        } else {
            return (orcamento.getValor() * 1) / 100;
        }
    }

    private boolean itemComMesmoNome(Orcamento orcamento) {
        for (Item it : orcamento.getItens()) {
            for (Item it1 : orcamento.getItens()) {
                if (it.getNome().equals(it1.getNome())) {
                    return true;
                }
            }
        }
        return false;
    }
}

Como verifico se uma lista possui mais de um item com o mesmo nome? tentei com 2 for, parem fica muito gambiarra rsrs...alguma sujetão melhor?

2 respostas
solução!

Você pode fazer com o Collections.frequency:

protected boolean deveUsarMaximaTaxacao(Orcamento orcamento) {
        for (Item item : orcamento.getItens()) {
            if(Collections.frequency(orcamento.getItens(), item) > 1){
                return true;
            }
        }
        return false;
    }

Ele retorna a quantidade de itens (item) dentro da coleção (orcamento.getItens()).

Pra saber mais da uma olhada no JavaDoc

fiz vários testes e sempre me retornou 1, mesmo que tenho item repetido

Muito Obrigado!!