Last active
August 14, 2017 02:08
-
-
Save BrunoDSouza/23e87cdb6f6542ed19578cde0074024f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public List<Produto> getPercentualProdutos(){ | |
//Soma todas as quantidades de produtos em todas as movimentações | |
Long total = m.findByTipoMovimentacao(TipoMovimentacao.SAIDA) | |
.stream() | |
.collect(Collectors.summingLong(Movimentacao::getQtd_produto)); | |
return m.findByTipoMovimentacao(TipoMovimentacao.SAIDA) | |
.stream() | |
//Agrupa a lista por produto, somando a quantidade de produtos | |
//return um map<Produto, Long> | |
.collect(Collectors.groupingBy(Movimentacao::getProduto, | |
Collectors.summingLong(Movimentacao::getQtd_produto))) | |
//Aplico nova operação stream sobre o map<> retornado | |
.entrySet().stream() | |
.map( map -> { | |
//Para cada item da estrutura, calcula o percentual | |
map.getKey().setPercentual( | |
getPercentual(map.getValue(), total) | |
); | |
//Retorna o produto com sua porcentagem calculada | |
return map.getKey(); | |
}) | |
//Ordena a lista pelo percentual calculado | |
.sorted(Comparator.comparing(Produto::getPercentual) | |
.reversed()) | |
//Limita o resultado a 10 items | |
.limit(10) | |
//convert para uma lista de protudos | |
.collect(Collectors.toList()); | |
} | |
public double getPercentual(double valor, double total ){ | |
return Math.round(((valor * 100) * 100) / total) /100D; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment