Boa tarde pessoal!
Estou resolvendo um exercicio proposto pelo meu professor para utilizarmos ArrayLists e Maps, e já fiz uns 50% do mesmo, mas só da parte referente a ArrayLists, consegui aprender rápido esse conceito.
Porém estou com dificuldade para trabalhar com Maps. Vou colocar abaixo o enunciado do exercicio(deixei em negrito o que já fiz):
Desenvolva uma classe Produto que represente a informação básica de um produto existente no armazém de uma dada empresa. Sobre cada produto pretende ter a seguinte informação:
private String codigo; // código
private String nome; // descrição
private int quant; // quantidade em estoque
private int alarme; // mínimo de alerta ? valor mínimo aceitável
Crie em seguida uma classe Empresa contendo o nome da empresa em questão e uma representação do estoque da empresa, associando a cada produto a sua lista de informação. Para além dos construtores e métodos usuais, a classe Empresa deverá definir ainda os seguintes métodos de instância:
Método que devolve todos os códigos dos produtos em estoque;
Método que insere um novo produto no estoque da empresa;
Método que remove do estoque o produto de código informado;
Método que altera a quantidade de um produto em estoque de um produto informado;
Método que devolve a quantidade total de produtos em estoque;
Método que verifica se o produto do código informado existe;
Método que cria uma lista com os códigos dos produtos com quantidade <= alarme;
Método que devolve uma cópia do estoque;
Método que devolve a informação de um produto de código informado;
Até aí tudo bem, implementei essas funcionalidades usando ArrayLists. Mas para fazer as outras funcionalidades que envolvem pesquisa, o mais correto seria utilizar um mapa, correto? Pretendo utilizar como parâmetro de pesquisa o código do produto, portanto acredito que o melhor seria colocar como Key dos produtos no mapeamento, o próprio código do produto. Mas como fazer isso? Vou ter quer mudar meu método de cadastro de itens para adicionar o código do produto, no momento do cadastro do mesmo, como sendo a sua Key?
Segue abaixo o que já elaborei:
Classe Produto:
public class Produto {
private String codigo;
private String nome;
private int quant;
private int alarme;
public Produto() {
}//fim do construtor.
//metodos get e set.
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getQuant() {
return quant;
}
public void setQuant(int quant) {
this.quant = quant;
}
public int getAlarme() {
return alarme;
}
public void setAlarme(int alarme) {
this.alarme = alarme;
}
@Override
public String toString() {
return "Nome: "+getNome()+"\nCódigo: "+getCodigo()+"\nQuantidade: "+getQuant()+"\nEstoque mínimo: "+getAlarme()+"\n";
}
}
Classe Empresa:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.JOptionPane;
public class Empresa {
List<Produto> produtos = new ArrayList<Produto>();
Map<String, List<Produto>> mapeamentoEstoque = new HashMap<String, List<Produto>>();
public void inserirNovoProduto() {
Produto novoProd = new Produto();
novoProd.setCodigo(JOptionPane.showInputDialog("Código:"));
novoProd.setNome(JOptionPane.showInputDialog("Nome:"));
novoProd.setQuant(Integer.parseInt(JOptionPane
.showInputDialog("Quantidade:")));
novoProd.setAlarme(Integer.parseInt(JOptionPane
.showInputDialog("Estoque mínimo:")));
produtos.add(novoProd);
}
public void devolverTodosOsCodigos() {
Iterator<Produto> iterator = produtos.iterator();
// SE O ARRAYLIST TIVER UM PROXIMO ITEM, ENTRA NO WHILE(hasNext);
while (iterator.hasNext()) {
// RETORNA O PROXIMO ITEM DA LISTA;
Produto obj = iterator.next();
// IMPRIME O ITEM DA LISTA E VOLTA AO INICIO DO LOOP WHILE;
System.out.println(obj.getCodigo());
}
}
public void removerProdutoDoEstoque() {
}
public void devolverCopiaDoEstoque() {
for (Object object : produtos) {
Produto obj = (Produto) object;
System.out.println(obj.toString());
}
}
public void devolverQuantidadeTotalDeEstoque() {
int quantTotal = 0;
for (Object object : produtos) {
Produto obj = (Produto) object;
quantTotal += obj.getQuant();
}
System.out.println("Há " + quantTotal + " produtos em estoque.");
}
}
Classe Main(estou utilizando-a para efetuar os testes, a cada nova funcionalidade do sistema implementada, faço um teste geral):
public class Main {
public static void main(String[] args) {
Empresa novo = new Empresa();
novo.inserirNovoProduto();
novo.inserirNovoProduto();
novo.devolverQuantidadeTotalDeEstoque();
}
}
Não tenho idéia de como trabalhar com mapeamento, já aprendi esse conceito mas foi no final da aula, acabei não praticando e esqueci tudo...
Obrigado!
:)
