Por que funciona: BigDecimal Sum com Reduzir e BigDecimal :: add

Eng Jorge Augusto Corra dois Re:

Eu posso entender porque Total1 é calculado, mas como Total2 é calculado Eu não tenho idéia! Como pode um BigDecimal :: add ser usado em uma BiFunction ? As assinaturas não são os mesmos !!!

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:

Dado BigDecimal::addestá sendo usado como um BiFunction<BigDecimal, BigDecimal, BigDecimal>, o compilador irá procurar por uma das duas assinaturas elegíveis.

A primeira assinatura possível, como você pegou em diante, seria um método estático de dois argumentos. O lambda relevante seria (a, b) -> BigDecimal.add(a, b). Claro, você está correto para reconhecer que isso não existe.

A segunda assinatura possível seria um método de instância de um argumento. O lambda equivalente aqui seria (a, b) -> a.add(b). Como existe este eo outro não, é assim que o compilador iria interpretá-lo.

Acho que você gosta

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