跟我一起java8(2)----方法引用


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一个Comparator类实现compare方法,可以引用一个已经存在的类的方法。当然,这个已存在的方法必须和compare方法的参数能对得上,并且被引用的接口必须是一个"函数接口"(FunctionalInterface).函数接口是java8引入的概念,一个函数接口只有一个抽象方法(default方法是一个实现)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值