O que isso lambda expressão significa?

Wu Jingyi:

Parece que uma classe anônima. I não encontrou qualquer artigo conversa sobre esse uso de lambdas.

   public Supplier<Map<Boolean, List<Integer>>> supplier() {
        return () -> new HashMap<>() { //todo what does this mean?
            {
                this.put(false, new ArrayList<>());
                this.put(true, new ArrayList<>());
            }
        };
    }
Jesper:

Há uma série de coisas diferentes acontecendo aqui.

O método retorna um Supplier<Map<...>>. A expressão lambda () -> new HashMap<>() ...retorna um exemplo da interface Supplierque retorna um HashMap.

Além disso, ele não retorna uma planície HashMap; uma subclasse anônima de HashMapestá sendo criado aqui por causa do exterior { ... }.

O interior { ... }é um exemplo inicializador de bloco que é utilizado para colocar o material no HashMap(duas entradas com teclas truee falsee cada um ArrayListcomo o valor).

Esta é usando o truque de inicialização duplo cinta . (Esse link aponta para um blogpost escrito por mim que explica por que eu não gosto de esse truque).

A melhor maneira de escrever isso (se você estiver usando Java 9 ou mais recente) que não usa o duplo cinta truque inicialização é assim:

public Supplier<Map<Boolean, List<Integer>>> supplier() {
    return () -> Map.of(
        false, new ArrayList<>(),
        true, new ArrayList<>());
}

Acho que você gosta

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