¿Por qué funciona: BigDecimal Suma con reduce y BigDecimal :: add

Eng Jorge Augusto Corra dos Re :

Puedo entender por qué se calcula Total1, pero a medida que se calcula Total2 no tengo ni idea! ¿Cómo puede un BigDecimal :: complemento puede utilizar en una BiFunction ? Las firmas no son los mismos !!!

package br.com.jorge.java8.streams.bigdecimal;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class BigDecimalSumTest {
    public static void main(String[] args) {

        List<BigDecimal> list = new ArrayList<>();

        list.add(new BigDecimal("1"));
        list.add(new BigDecimal("2"));

        BigDecimal total1 = list.stream().reduce(BigDecimal.ZERO, (t, v) -> t.add(v));

        BigDecimal total2 = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);

        System.out.println("Total 1: " + total1);
        System.out.println("Total 2: " + total2);
    }
}
Joe C:

Teniendo en cuenta BigDecimal::addque se está utilizando como BiFunction<BigDecimal, BigDecimal, BigDecimal>, el compilador buscará una de las dos firmas elegibles.

La primera firma es posible, como se ha recogido en adelante, sería un método estático de dos argumentos. La lambda sería relevante (a, b) -> BigDecimal.add(a, b). Por supuesto, estás en lo correcto al reconocer que este no existe.

La segunda firma posible sería un método de instancia de un argumento. La lambda equivalente aquí sería (a, b) -> a.add(b). Como éste existe y el otro no lo hace, así es como el compilador lo interpretaría.

Supongo que te gusta

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