Java8之方法引用
来源:互联网 发布:俄军战斗力 知乎 编辑:程序博客网 时间:2024/05/22 07:08
在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法。然而,有时候我们仅仅是调用了一个已存在的方法。如下:
Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));
在Java8中,我们可以直接通过方法引用来简写lambda表达式中已经存在的方法。
Arrays.sort(stringsArray, String::compareToIgnoreCase);
这种特性就叫做方法引用(Method Reference)。
方法引用的形式
方法引用的标准形式是:类名::方法名
。(注意:只需要写方法名,不需要写括号)
有以下四种形式的方法引用:
下面我们通过一个小Demo来分别学习这几种形式的方法引用:
public class Person { public enum Sex{ MALE,FEMALE } String name; LocalDate birthday; Sex gender; String emailAddress; public String getEmailAddress() { return emailAddress; } public Sex getGender() { return gender; } public LocalDate getBirthday() { return birthday; } public String getName() { return name; } public static int compareByAge(Person a,Person b){ return a.birthday.compareTo(b.birthday); }}
引用静态方法
Person [] persons = new Person[10];//使用匿名类Arrays.sort(persons, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o1.birthday.compareTo(o2.birthday); } });//使用lambda表达式Arrays.sort(persons, (o1, o2) -> o1.birthday.compareTo(o2.birthday));//使用lambda表达式和类的静态方法Arrays.sort(persons, (o1, o2) -> Person.compareByAge(o1,o2));//使用方法引用//引用的是类的静态方法Arrays.sort(persons, Person::compareByAge);
引用对象的实例方法
class ComparisonProvider{ public int compareByName(Person a,Person b){ return a.getName().compareTo(b.getName()); } public int compareByAge(Person a,Person b){ return a.getBirthday().compareTo(b.getBirthday()); } }ComparisonProvider provider = new ComparisonProvider();//使用lambda表达式//对象的实例方法Arrays.sort(persons,(a,b)->provider.compareByAge(a,b));//使用方法引用//引用的是对象的实例方法Arrays.sort(persons, provider::compareByAge);
引用类型对象的实例方法
String[] stringsArray = {"Hello","World"};//使用lambda表达式和类型对象的实例方法Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));//使用方法引用//引用的是类型对象的实例方法Arrays.sort(stringsArray, String::compareToIgnoreCase);
引用构造方法
public static <T, SOURCE extends Collection<T>, DEST extends Collection<T>> DEST transferElements(SOURCE sourceColletions, Supplier<DEST> colltionFactory) { DEST result = colltionFactory.get(); for (T t : sourceColletions) { result.add(t); } return result; }... final List<Person> personList = Arrays.asList(persons);//使用lambda表达式Set<Person> personSet = transferElements(personList,()-> new HashSet<>());//使用方法引用//引用的是构造方法Set<Person> personSet2 = transferElements(personList, HashSet::new);
阅读全文
0 0
- java8之方法引用
- Java8之方法引用
- java8之方法引用
- Java8之方法引用
- java8系列之方法引用
- JAVA8之方法引用和构造引用
- Java8 新特性之三---------方法引用
- 详解Java8特性之方法引用
- 30分钟入门Java8之方法引用
- Java8新特性之三方法引用
- Java8 的方法引用
- Java8方法引用(::)
- Java8---5.方法引用
- java8 方法引用
- Java8 _ 方法引用 ::
- java8中的方法引用
- java8-静态方法引用
- Java8 MethodReference方法引用
- AndroidStudio3.0 Canary 的使用记录
- APK瘦身之路
- (原创)如何在性能测试中更有效的设置检查点
- STATIC_DRAW, DYNAMIC_DRAW, STREAM_DRAW的区别
- 一个全面介绍uBoot的文章
- Java8之方法引用
- Vuex 入门介绍
- 数据结构实验之栈七:出栈序列判定
- Vuex 进阶,创建一个笔记本项目
- iOS中viewDidLoad, viewWillDisappear, viewWillAppear等加载顺序
- 完美网络
- Jsp 根据绝对路径加载本地图片
- Memcached 简介
- python离散特征编码