Java: Cómo manipular adecuadamente gama BigDecimal utilizando la programación funcional?

juststuck:

Por lo tanto, la forma de obtener los resultados de este código usando la programación funcional:

public static final List<BigDecimal> numbers = Arrays.asList(
    new BigDecimal("15"), new BigDecimal("10"), new BigDecimal("17"),
    new BigDecimal("30"), new BigDecimal("18"), new BigDecimal("23"),
    new BigDecimal("5"), new BigDecimal("12") );

BigDecimal totalOfReducedNumbers = BigDecimal.ZERO;
   for(BigDecimal number : numbers) {
       if(number.compareTo(BigDecimal.valueOf(20)) > 0) 
           totalOfReducedNumbers = 
         totalOfReducedNumbers.add(number.multiply(BigDecimal.valueOf(0.9)));
   }
System.out.println("Total of reduced numbers: " + totalOfReducedNumbers);

Lo que arroja a cabo " total de un número reducido: 47.7 "

¿Cómo obtener el mismo resultado utilizando herramientas de programación funcionales como mapa (), reducir (), etc?

Ousmane D .:

El bucle de aplicación es un típico "reducir" patrón (también conocido como "doblar", modelo "agregado" en algunos otros idiomas)

Usted está buscando filter-> reducemétodo:

BigDecimal reduce = 
         numbers.stream()
                .filter(n -> n.compareTo(BigDecimal.valueOf(20)) > 0)
                .reduce(BigDecimal.ZERO, 
                       (a, b) -> a.add(b.multiply(BigDecimal.valueOf(0.9))));

Puede minimizar aún más el número de objetos contructed por el almacenamiento en caché BigDecimal.valueOf(20)y BigDecimal.valueOf(0.9)como se muestra en @ es decir, la respuesta de Elliot:

BigDecimal TWENTY = BigDecimal.valueOf(20);
BigDecimal POINT9 = BigDecimal.valueOf(0.9);
BigDecimal reduce = 
             numbers.stream()
                    .filter(n -> n.compareTo(TWENTY) > 0)
                    .reduce(BigDecimal.ZERO, 
                           (a, b) -> a.add(b.multiply(POINT9)));

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=171771&siteId=1
Recomendado
Clasificación