diff --git a/src/com/github/deividfrancis/Carrinho.java b/src/com/github/deividfrancis/Carrinho.java new file mode 100644 index 0000000..1254428 --- /dev/null +++ b/src/com/github/deividfrancis/Carrinho.java @@ -0,0 +1,155 @@ +package com.github.deividfrancis; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class Carrinho { + + private static List produtoList = new ArrayList(); + + static { + produtoList.add(new Produto(744, "Redragon Kumara", 243.35, "Tecnologia", true)); + produtoList.add(new Produto(850, "Redragon Cobra", 190.20, "Tecnologia", true)); + produtoList.add(new Produto(22, "SSD M.2", 102.02, "Tecnologia", true)); + produtoList.add(new Produto(848, "Monitor 24p 165hz", 1153.00, "Tecnologia", false)); + produtoList.add(new Produto(254, "Oculos de ciclismo", 104.02, "Esporte", true)); + produtoList.add(new Produto(78, "Molinete de pesca", 175.00, "Esporte", false)); + produtoList.add(new Produto(415, "Tenis allstar", 167.00, "Vestuario", true)); + produtoList.add(new Produto(403, "Luva de motociclista", 134.00, "Vestuario", false)); + produtoList.add(new Produto(625, "chave de fenda magnética", 55.00, "Equipamentos", true)); + produtoList.add(new Produto(573, "Tapete Geometrico", 114.00, "Lazer", true)); + } + + public static void main(String[] args) { + + // i. Crie uma lista somente com os produtos da categoria (Tecnologia); + listarSomenteProdutosTecnologia(); + + // ii. Crie uma lista contendo todos os produtos com estoque e com valor maior de 200 reais; + listarSomenteProdutosComEstoque(); + + // iii. Crie uma lista somente com os nomes dos produto com estoque; + listarNomeDeProdutosEmEstoque(); + + // iv. Faz a soma de todos os produtos da categoria (Esporte); + somarTodosOsProdutosDaCategoriaEsporte(); + + // v. Busca o primeiro produto da categoria (Equipamentos); + buscarPrimeiroProdutoDaCategoriaEquipamentos(); + + // vi. Ordenar a lista de produto por ordem alfabetica; + listarProdutosPorOrdemAlfabetica(); + + // vii. Agrupar todos produtos por categoria; + listarProdutosPorCategoria(); + + // viii. Mostrar a categoria onde estão os produtos mais caros; + buscarCategoriaQueContemOsProdutosMaisCaros(); + + // ix. Crie uma lista que contem somente os ids: 850, 403, 625; + listarIdDosProdutosEscolhidos(); + } + + private static void listarSomenteProdutosTecnologia() { + List produtoTecnologiaList = produtoList.stream() + .filter(p -> p.getCategoria().equals("Tecnologia")) + .collect(Collectors.toList()); + + produtoTecnologiaList.forEach(p -> produtoLog(p)); + } + + private static void listarSomenteProdutosComEstoque() { + List produtoEstoqueList = produtoList.stream() + .filter(p -> p.getTemEstoque() == true) + .filter(p -> p.getValor() > 200.00) + .collect(Collectors.toList()); + + produtoEstoqueList.forEach(p -> produtoLog(p)); + } + + private static void listarNomeDeProdutosEmEstoque() { + List nomeProdutoList = produtoList.stream() + .filter(p -> p.getTemEstoque() == true) + .map(Produto::getNome) + .collect(Collectors.toList()); + + nomeProdutoList.forEach(s -> System.out.println(s)); + } + + private static void somarTodosOsProdutosDaCategoriaEsporte() { + Double totalEsporte = produtoList.stream() + .map(Produto::getValor) + .reduce(0.00, (accumulator, next) -> accumulator + next); + + System.out.println(totalEsporte); + } + + private static void buscarPrimeiroProdutoDaCategoriaEquipamentos() { + Produto primeiroProduto = produtoList.stream() + .filter(p -> p.getCategoria().equals("Equipamentos")) + .findFirst() + .orElse(null); + + produtoLog(primeiroProduto); + } + + private static void listarProdutosPorOrdemAlfabetica() { + List produtoAlfabeticoList = produtoList.stream() + .map(p -> p.getNome().toLowerCase()) + .sorted() + .collect(Collectors.toList()); + + produtoAlfabeticoList.forEach(s -> System.out.println(s)); + } + + private static void listarProdutosPorCategoria() { + Map> produtoCategoriaMap = produtoList.stream() + .collect(Collectors.groupingBy(Produto::getCategoria)); + + produtoCategoriaMap.forEach((s, p) -> { + System.out.println(s); + p.forEach(prod -> produtoLog(prod)); + System.out.println("-------------------"); + }); + } + + private static void buscarCategoriaQueContemOsProdutosMaisCaros() { + Entry categoriaMaisCara = produtoList.stream() + .collect(Collectors.groupingBy(Produto::getCategoria, + Collectors.summingDouble(Produto::getValor))) + .entrySet() + .stream() + .max(Comparator.comparing(Map.Entry::getValue)) + .orElse(null); + + System.out.println(categoriaMaisCara.getKey() + " - " + categoriaMaisCara.getValue()); + } + + private static void listarIdDosProdutosEscolhidos() { + Predicate con1 = p -> p == 850; + Predicate con2 = p -> p == 403; + Predicate con3 = p -> p == 625; + + List produtoIdList = produtoList.stream() + .map(Produto::getId) + .filter(con1.or(con2).or(con3)) + .collect(Collectors.toList()); + + produtoIdList.forEach(System.out::println); + } + + private static void produtoLog(Produto produto) { + Integer id = produto.getId(); + String nome = produto.getNome(); + String categoria = produto.getCategoria(); + Double valor = produto.getValor(); + Boolean temEstoque = produto.getTemEstoque(); + + System.out.println(id + " " + nome + " " + categoria + " " + valor + " " + temEstoque); + } +} diff --git a/src/com/github/deividfrancis/Produto.java b/src/com/github/deividfrancis/Produto.java new file mode 100644 index 0000000..a33fe8d --- /dev/null +++ b/src/com/github/deividfrancis/Produto.java @@ -0,0 +1,58 @@ +package com.github.deividfrancis; + +public class Produto { + + private Integer id; + private String nome; + private Double valor; + private String categoria; + private Boolean temEstoque; + + public Produto(Integer id, String nome, Double valor, String categoria, Boolean temEstoque) { + this.id = id; + this.nome = nome; + this.valor = valor; + this.categoria = categoria; + this.temEstoque = temEstoque; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public Double getValor() { + return valor; + } + + public void setValor(Double valor) { + this.valor = valor; + } + + public String getCategoria() { + return categoria; + } + + public void setCategoria(String categoria) { + this.categoria = categoria; + } + + public Boolean getTemEstoque() { + return temEstoque; + } + + public void setTemEstoque(Boolean temEstoque) { + this.temEstoque = temEstoque; + } +}