``import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class DesafioSemLoop {
public static BigDecimal totalCompras(List<Compra> compras) {
return compras.stream()
.map((c)-> c.produtos)
.flatMap(List::stream)
.map((item) -> BigDecimal.valueOf(item.qtd).multiply(item.valorUnitario))
.reduce(BigDecimal.ZERO, (Acumulador, ValorAtual) -> Acumulador.add(ValorAtual) );
}`
// a partir daqui não pode mudar nada
public static void main(String... args) {
List<Compra> compras = Arrays.asList(
new Compra("2022-01-01",
Arrays.asList(
new ItemCompra("a", 2, new BigDecimal("12.34")),
new ItemCompra("b", 1, new BigDecimal("3.99")),
new ItemCompra("d", 3, new BigDecimal("98.14"))
)),
new Compra("2022-01-02",
Arrays.asList(
new ItemCompra("a", 6, new BigDecimal("12.34")),
new ItemCompra("b", 1, new BigDecimal("3.99")),
new ItemCompra("c", 1, new BigDecimal("34.02"))
))
);
System.out.println("O total das compras foi de " + totalCompras(compras).toPlainString());
}
public static class Compra {
public final String data;
public final List<ItemCompra> produtos;
public Compra(String data, List<ItemCompra> produtos) {
this.data = data;
this.produtos = Collections.unmodifiableList(new ArrayList<>(produtos));
}
}
public static class ItemCompra {
public final String cod;
public final int qtd;
public final BigDecimal valorUnitario;
public ItemCompra(String cod, int qtd, BigDecimal valorUnitario) {
this.cod = cod;
this.qtd = qtd;
this.valorUnitario = valorUnitario;
}
}
}`