Pourquoi Comparateur.la comparaison ne fonctionne pas avec String::toLowerCase méthode de référence?

Je suis en train de trier un tableau de Chaînes de caractères par ordre inverse (ignorant la casse), sans le modifier, et juste de l'imprimer. Je suis donc à l'aide de Java8 flux. Mais je n'arrive pas à le faire.

Voici ma tentative :

package experimentations.chapter02;

import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Collectors;

public class StringStream {

    public static void main(String[] args) {
        sortStrings();
    }

    public static void sortStrings(){
        String[] stringsArray = "The quick brown fox has a dirty ladder".split("\\s+");
        System.out.println(
                Arrays.stream(stringsArray)
                .sorted(Comparator.comparing(String::toLowerCase).reversed())
                .collect(Collectors.toList())
        );
    }

}

Le problème ici est que String::toLowerCase n'est pas accepté dans la méthode statique Comparator.comparing.

Pendant ce temps, j'ai réussi à trier le tableau, mais modifiant c':

public static void sortStrings(){
        String[] stringsArray = "The quick brown fox has a dirty ladder".split("\\s+");
        System.out.println(
                Arrays.stream(stringsArray)
                .map(String::toLowerCase)
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList())
        );
}

Alors, quelle est la plus simple solution de contournement?

  • J'ai trouvé la solution : .triés((String e) -> adresse.toLowerCase) . Pendant ce temps, j'ai demandé la suppression de la poste, comme cela semble tellement évident pour moi de savoir, j'aurais trouvé sans avoir posé la question ...
  • Votre premier extrait de code compile bien. Êtes-vous sur une vieille version de Java 8? Ou peut-être de la compilation dans eclipse? Le problème que vous mentionnez a été fixé à construire 129. Voir aussi stackoverflow.com/q/21751830/829571
InformationsquelleAutor loloof64 | 2014-04-08