在了解 Lambda 表达式之后,我们来看这样一段代码:
1 2 3 4 5
| public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 3, 5, 2, 4, 6); Collections.sort(list, (o1, o2) -> o1.compareTo(o2)); System.out.println(list); }
|
如果 Lambda 表达式中仅仅是调用了一个已存在的方法,在 Java8 中,可以使 :: 关键字来替代 Lambda 表达式。
关键字 :: 可以用来引用一个方法或构造器,这种特性称为方法引用。
1 2 3 4 5
| public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 3, 5, 2, 4, 6); Collections.sort(list, Integer::compareTo); System.out.println(list); }
|
声明一个函数式接口
1 2 3 4
| @FunctionalInterface interface Converter<I, O> { O convert(I input); }
|
引用静态方法(类名::静态方法名)
1 2 3 4 5 6 7
| public static void main(String[] args) { Converter<String, Integer> converter = Integer::valueOf; Integer result = converter.convert("256"); System.out.println(result); }
|
引用对象的实例方法(对象::方法名)
1 2 3 4 5 6 7 8
| public static void main(String[] args) { DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Converter<Date, String> converter = format::format; String result = converter.convert(new Date()); System.out.println(result); }
|
引用某种类型的任意对象的实例方法(类名::方法名)
1 2 3 4 5 6 7
| public static void main(String[] args) { Converter<String, Boolean> converter = String::isEmpty; Boolean result = converter.convert("foo"); System.out.println(result); }
|
引用构造方法(类名::new)
1 2 3 4 5 6 7
| public static void main(String[] args) { Converter<String, Integer> converter = Integer::new; Integer result = converter.convert("256"); System.out.println(result); }
|