web-dev-qa-db-ja.com

java:ラムダ式のArrays.sort()

Arrays.sortメソッドを使用して、長さで配列monthsの文字列要素をソートしたい。 here と言われましたが、Comparatorを実装する新しいクラスを作成する代わりにラムダ式を使用することができます。それはまったく同じ方法でしたが、まだ機能しません。

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

最もクリーンな方法は次のとおりです。

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

または、静的インポートの場合:

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

ただし、これも機能しますが、より冗長です。

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

または短く:

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

最後にあなたの最後のもの:

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

;見当違い-次のようになります。

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

あなたはこれを探しています:

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

探している機能はJava 8にありますが、まだリリースされていません。しばらくお待ちください、またはベータ版のダウンロードが利用できない場合は数か月後にリリースされる予定です。

1
Tim B