Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Isso não deveria funcionar?

eu fiz isso do outro modo (criando uma classe que implementa o comparator e dando new e tals) mas gostaria de fazer utilizando lambda e essa outra forma mais reduzida, achei que funcionaria como está abaixo mas na verdade o código abaixo não compila! Pode me ajudar?

palavras.sort(Comparator.comparing(String::compareTo));

2 respostas

Olá Ilton,

Acho que o está tentando fazer é resolvido como no exemplo abaixo.

Espero que seja isso mesmo e que te ajude.. abraço!

package br.com.alura.lambda;

import java.util.ArrayList;
import java.util.List;

public class TesteLambda {

    public static void main(String[] args) {

        List<String> palavras = new ArrayList<String>();
        palavras.add("Ola");
        palavras.add("Brasil");
        palavras.add("Alura");
        palavras.add("Java");

        palavras.sort(String::compareTo);

        palavras.forEach(System.out::println);

    }

}
solução!

Ah Ilton! Apenas uma observação para não gerar confusão... da forma como coloquei acima, o que está sendo "usado" não é Compator.comparing(), mas sim, uma implementação mais enxuta de um Comparator..

        // explicitamente com Comparator
        palavras.sort(new Comparator<String>() {

            @Override
            public int compare(String palavra1, String palavra2) {
                return palavra1.compareTo(palavra2);
            }
        });
        // usando lambda
        palavras.sort((palavra1, palavra2) -> palavra1.compareTo(palavra2));

        // usando method reference
        palavras.sort(String::compareTo);

O Comparator.comparing() recebe uma Function o que permitiria usar method references num caso como o que segue abaixo, para ordenar pelo tamanho da String.

        // usando a implementação de uma Function
        palavras.sort(Comparator.comparing(new Function<String, Integer>() {

            @Override
            public Integer apply(String palavra) {
                return palavra.length();
            }
        }));

        // usando lambda
        palavras.sort(Comparator.comparing(palavra -> palavra.length()));

        // usando method references
        palavras.sort(Comparator.comparing(String::length));