Skip to content

Instantly share code, notes, and snippets.

@BrunoDSouza
Last active August 14, 2017 02:08
Show Gist options
  • Save BrunoDSouza/23e87cdb6f6542ed19578cde0074024f to your computer and use it in GitHub Desktop.
Save BrunoDSouza/23e87cdb6f6542ed19578cde0074024f to your computer and use it in GitHub Desktop.
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