web-dev-qa-db-fra.com

java: Arrays.sort () avec expression lambda

Je veux trier les éléments String dans le tableau months par longueur en utilisant Arrays.sort méthode. On m'a dit ici , qu'il est possible d'utiliser des expressions lambda au lieu de créer une nouvelle classe implémentant Comparator. A fait exactement la même manière, mais cela ne fonctionne pas.

import Java.util.Arrays;
import Java.util.Comparator;

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

    String[] months = {"January","February","March","April","May","June","July","August","September","October","December"};

    System.out.println(Arrays.toString(months)); //printing before


    //neither this works:
    Arrays.sort(months, 
            (a, b) -> Integer.signum(a.length() - b.length())   
    );

    //nor this:
    Arrays.sort(months, 
            (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; 
    );


    System.out.println(Arrays.toString(months)); //printing after
}
}
14
matt-pielat

Le moyen le plus propre serait:

Arrays.sort(months, Comparator.comparingInt(String::length));

ou, avec une importation statique:

Arrays.sort(months, comparingInt(String::length));

Cependant, cela fonctionnerait aussi mais est plus détaillé:

Arrays.sort(months,
            (String a, String b) -> a.length() - b.length());

Ou plus court:

Arrays.sort(months, (a, b) -> a.length() - b.length());

Enfin votre dernier:

Arrays.sort(months, 
    (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; 
);

a la ; mal placé - il devrait être:

Arrays.sort(months, 
    (String a, String b) -> { return Integer.signum(a.length() - b.length()); }
);
51
assylias

Vous recherchez ceci:

Arrays.sort(months, (a, b) -> Integer.signum(a.length() - b.length()));
2
Josh M

La fonctionnalité que vous recherchez se trouve dans Java 8, qui n'a pas encore été publiée. Elle devrait sortir dans quelques mois si vous voulez attendre, ou si des téléchargements bêta ne sont pas disponibles.

1
Tim B