Vamos criar um programa em Java para trabalhar com uma lista de produtos. Cada produto terá um nome, um preço e um desconto associado. Utilizaremos diferentes tipos de interfaces funcionais para manipular esses produtos.
Crie uma classe chamada Produto
com os seguintes atributos:
String
nome: para armazenar o nome do produto.Double
preco: para armazenar o preço do produto.Double
desconto: para armazenar o desconto aplicável ao produto (um valor de 0.0 a 1.0).Dica: implemente um construtor que receba todos os atributos e o método
toString
para auxiliar no seu teste.
Agora, vamos criar funções anônimas utilizando diferentes tipos de interfaces funcionais para manipular os produtos. Crie uma classe com método main e faça o que é solicitado:
Supplier - retornarListaDeProdutos: Implemente uma função anônima que retorne uma lista com 5 produtos diferentes.
Function - calcularPrecoFinal: Implemente uma função anônima que receba um produto e retorne o preço final após aplicar o desconto.
Predicate - temFrete: Implemente uma função anônima que receba um preço e retorne se ele possui valor de frete. Caso o preço seja menor que R$ 50 retorne verdadeiro, e caso contrário retorne falso.
UnaryOperator - acrescerFrete: Crie uma função anônima que receba um preço e acresça o valor de frete (R$ 9.99) caso se aplique (use o Predicate implementado anteriormente).
UnaryOperator - acrescerImposto: Crie uma função anônima que receba um preço e acresça 4.5% referente ao imposto municipal.
UnaryOperator - arredondarPreco: Crie uma função anônima que receba um preço e arredonde para duas casas decimais.
BiConsumer - imprimirProduto: Crie uma função anônima que receba um produto e seu novo preço e imprima o nome do produto e o preço recebido.
Faça um código que use as funções criadas anteriormente, encadeando-as através dos métodos andThen
das interfaces Function e UnaryOperator:
forEach
da lista do Supplier.Veja, a seguir, uma sugestão de como o código deve funcionar.
Atenção:
antes de ver o código abaixo, tente fazer por conta própria, pois este trecho já faz parte da resposta!Ver código
```java retornarListaDeProdutos.get().forEach(produto -> { Double novoPreco = calcularPrecoFinal .andThen(acrescerFrete) .andThen(acrescerImposto) .andThen(arredondarPreco) .apply(produto); imprimirProduto.accept(produto, novoPreco); } ); ```