Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Desenvolvimento Web I / Aula
package livraria.negocio;
import java.util.*;
public class CarrinhoCompras {
Map<String, ItemCompra> itens;
public CarrinhoCompras() {
itens = new HashMap<String, ItemCompra>();
}
public synchronized void adicionar(Livro book) {
if (itens.containsKey(book.getIdLivro())) {
ItemCompra item = itens.get(book.getIdLivro());
item.incrementaQuantidade();
} else {
ItemCompra novoItem = new ItemCompra(book);
itens.put(book.getIdLivro(), novoItem);
}
}
public synchronized void remover(String idLivro) {
if (itens.containsKey(idLivro)) {
ItemCompra item = itens.get(idLivro);
item.decrementaQuantidade();
if (item.getQuantidade() <= 0) {
itens.remove(idLivro);
}
}
}
public synchronized List<ItemCompra> getItens() {
List<ItemCompra> resultado = new ArrayList<ItemCompra>();
resultado.addAll(this.itens.values());
return resultado;
}
protected void finalize() throws Throwable {
itens.clear();
}
public synchronized int getNumeroItens() {
int numeroItens = 0;
for (ItemCompra item : getItens()) {
numeroItens += item.getQuantidade();
}
return numeroItens;
}
public synchronized double getTotal() {
double total = 0.0;
for (ItemCompra item : getItens()) {
Livro book = item.getItem();
total = total + (item.getQuantidade() * book.getPreco());
}
return total;
}
public void limpar() {
itens.clear();
}
}
O método remover(), na linha 22, só vai fazer algo caso exista uma entrada no mapeamento para o código do livro passado como parâmetro. Se esse for o caso, basta recuperar o objeto ItemCompra mapeado (linha 24) e decrementar, em uma unidade, a quantidade de livros a ser comprada (método decrementaQuantidade()).
Por fim, caso a quantidade de livros restante a ser comprada seja menor ou igual a zero, isso quer dizer que nenhum livro daquele tipo será comprado. Sendo assim, removemos do mapeamento a entrada relativa a esse livro (linha 27), fazendo com que esse item saia do carrinho de compras.
É interessante destacar alguns outros métodos, como o getItens(), da linha 33, o qual retorna o conteúdo do carrinho de compras, ou seja, todos os itens a serem comprados. Para isso, criamos uma nova lista de objetos ItemCompra e adicionamos nessa lista todo os itens existentes no carrinho de compras. Isso é feito por meio do método addAll(), o qual recebe uma coleção de objetos (conteúdo do carrinho) e adiciona todos esses elementos na lista criada.
Outro método do carrinho de compras é o getTotal(), linha 51, o qual percorre todos os elementos do carrinho de compras e contabiliza o valor total a ser gasto com a compra desses produtos. Para isso, o método leva em conta a quantidade de livros a serem comprados e o preço unitário. A variável total é utilizada como acumulador (linha 55) durante o cálculo do valor total a ser gasto na compra dos livros selecionados.
Por fim, vale a pena também ressaltar que o método limpar(), definido na linha 60, tem como objetivo remover todos os itens selecionados do carrinho de compra. Isso é feito acionando-se o método clear() da interface Map, que vai eliminar todas as entradas existentes no mapeamento.
Versão 5.3 - Todos os Direitos reservados