30分钟入门Java8之方法引用学习

2025-05-29 0 97

前言

之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法。今天我们继续学习Java8的新语言特性——方法引用(Method References)。

在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法。然而,有时候我们仅仅是调用了一个已存在的方法。如下:

?

1
Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));

在Java8中,我们可以直接通过方法引用来简写lambda表达式中已经存在的方法

?

1
Arrays.sort(stringsArray, String::compareToIgnoreCase);

这种特性就叫做方法引用(Method Reference)。

方法引用的形式

方法引用的标准形式是: 类名::方法名 。(注意:只需要写方法名,不需要写括号)

有以下四种形式的方法引用:

类型 示例
引用静态方法 ContainingClass::staticMethodName
引用某个对象的实例方法 containingObject::instanceMethodName
引用某个类型的任意对象的实例方法 ContainingType::methodName
引用构造方法 ClassName::new

下面我们通过一个小Demo来分别学习这几种形式的方法引用:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54
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);

}

}

引用静态方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
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);

引用对象的实例方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37
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);

引用类型对象的实例方法

?

1

2

3

4

5

6

7

8

9

10

11
String[] stringsArray = { "Hello" , "World" };

//使用lambda表达式和类型对象的实例方法

Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));

//使用方法引用

//引用的是类型对象的实例方法

Arrays.sort(stringsArray, String::compareToIgnoreCase);

引用构造方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
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 );

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/JohnTsai/p/5806194.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 30分钟入门Java8之方法引用学习 https://www.kuaiidc.com/117434.html

相关文章

发表评论
暂无评论