私と一绪にjava 8(2)----方法引用
1770 ワード
private static class Utils {
public static int compareByLength(String in, String out) {
return in.length() - out.length();
}
}
private class MyObject {
public int compareByFirstChar(String in, String out) {
return in.charAt(0) - out.charAt(0);
}
}
@Test
public void testMethods() {
String[] args = new String[] { "microsoft", "apple", "linux", "oracle", "123" };
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String in, String out) {
return in.length() - out.length();
}
};
//
Arrays.sort(args, comparator);
// Utils compareByLength
Arrays.sort(args, Utils::compareByLength);
MyObject mj = new MyObject();
// mj compareByFirstChar
Arrays.sort(args, mj::compareByFirstChar);
//Lambda
Arrays.sort(args, (in, out) -> {
return in.length() - out.length();
});
// System.out println
Arrays.asList(args).forEach(System.out::println);
}
Arrays.sort(args, Utils::compareByLength);この書き方は「メソッドリファレンス」(Method references)と呼ばれ、argsをソートする必要がある場合、既存のクラスのメソッドを再newする必要はありません.もちろん、この既存の方法はcompare方法のパラメータと一致する必要があり、参照されるインタフェースは「関数インタフェース」(FunctionalInterface)でなければならない.関数インタフェースはjava 8が導入した概念であり、1つの関数インタフェースには抽象的な方法が1つしかない(defaultメソッドは実装されている).