0%

java | 方法引用

为了进一步简化 lambda 的写法。

1
::

方法引用的四种形式

  • 静态方法引用
  • 实例方法引用
  • 特定类型方法的引用
  • 构造器引用

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {

public static void main(String[] args) {
List<String> lists = new ArrayList<>();
lists.add("1");
lists.add("2");

lists.forEach( s -> System.out.println(s));

// 方法引用
lists.forEach( System.out::println);
}
}

静态方法引用

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
package com.redisc;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Student {
public int getScore() {
return score;
}

public int score;

public static int compareScore(Student o1, Student o2) {
return o1.getScore() - o2.getScore();
}
}


public class Test {

public static void main(String[] args) {
List<Student> lists = new ArrayList<>();

// lambda
Collections.sort(lists, (Student o1, Student o2) -> {
return o1.getScore() - o2.getScore();
});
// lambda 简化
Collections.sort(lists, (o1, o2) -> {
return o1.getScore() - o2.getScore();
});
// lambda 简化
Collections.sort(lists, (o1, o2) -> o1.getScore() - o2.getScore());
// 静态方法再简化
Collections.sort(lists, (o1, o2) -> Student.compareScore(o1, o2));
// 如果前后参数一样的,而且方法是静态方法,可以使用静态方法引用
Collections.sort(lists, Student::compareScore);

}
}

实例方法引用

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {

public static void main(String[] args) {
List<String> lists = new ArrayList<>();
lists.add("1");
lists.add("2");

lists.forEach( s -> System.out.println(s));

// 方法引用,前后参数都是一个
lists.forEach( System.out::println);
}
}

特定类型方法的引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Test {

public static void main(String[] args) {
String[] strs = new String[]{"1", "2"};

Arrays.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});

// Lambda

Arrays.sort(strs, (s1, s2) -> {
return s1.compareToIgnoreCase(s2);
});

// 方法引用

Arrays.sort(strs,String::compareToIgnoreCase);
}
}

构造器引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {

public static void main(String[] args) {
List<String> lists = new ArrayList<>();
String[] strs = lists.toArray(new IntFunction<String[]>() {
@Override
public String[] apply(int value) {
return new String[value];
}
});

String[] stts1 = lists.toArray( s -> new String[s]);
// 构造器
String[] strs1 = lists.toArray( String[]::new);
}
}
请我喝杯咖啡吧~