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
}
}
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()); }
);
Vous recherchez ceci:
Arrays.sort(months, (a, b) -> Integer.signum(a.length() - b.length()));
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.