1 package com.Lucky.Function;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.function.Function;
6 import java.util.function.Predicate;
7 import java.util.stream.Stream;
8
9 /*
10 方法引用: 将已经存在的方法进行引用
11 使用条件:1.引用地方要是函数式接口:@FunctionalInterface
12 2.被引用的方法必须存在
13 3.被引用的方法的形参以及返回值要跟抽象方法的保持一致
14 4.被引用的方法要满足当前抽象方法的需求
15 */
16
17 /**
18 * 成员方法的引用: 对象::方法
19 * 1.其他类 其他对象::方法
20 * 1.本类 this::方法 【注意点:在static方法中无法使用this或super】
21 * 1.父类 super::方法
22 *
23 * 要求1:只要张开头的数据并且长度为3
24 */
25 public class Function3 {
26
27 public static void main(String[] args) {
28 //1.创建
29 ArrayList<String> list=new ArrayList<>();
30 Collections.addAll(list,"张天爱","张三丰","张三","王五","李四","一一");
31
32
33
34
35 System.out.println("---①.原本写法:采用匿名内部类------");
36 list.stream().filter(new Predicate<String>() {
37 @Override
38 public boolean test(String s) {
39 return s.startsWith("张")&& s.length() == 3;
40 }
41 }).forEach(s -> System.out.println(s));
42
43 System.out.println("---②进阶写法:lamda表达式------");
44 list.stream().filter(s->s.startsWith("张")&& s.length() == 3).forEach(s -> System.out.println(s));
45
46
47
48 /*
49 this/super的使用: 我在test.java中使用了,去看吧,这里演示不了
50 */
51 System.out.println("---③高阶写法:本类方法引用:在这里无法演示this------");
52 list.stream().filter(new Function3()::filterData)
53 .forEach(s -> System.out.println(s));
54
55
56 System.out.println("---③高阶写法:其他类方法引用------");
57 list.stream().filter(new Function1()::filter)
58 .forEach(s -> System.out.println(s));
59
60 System.out.println("---③高阶写法:super类方法引用:在这里无法演示super-------");
61
62 }
63
64
65 /**
66 * 不带static修饰符的方法就是成员方法
67 * @param s
68 * @return
69 */
70 public boolean filterData(String s) {
71 return s.startsWith("张")&& s.length() == 3;
72 }
73 }
this与super展示:
package com.Lucky.Function;
//启动类
public class test {
public static void main(String[] args) {
new Function4();
}
}
package com.Lucky.Function;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.function.Predicate;
/**
* 成员方法的引用: 对象::方法
* 1.其他类 其他对象::方法
* 1.本类 this::方法 【注意点:在static方法中无法使用this或super】
* 1.父类 super::方法
*
*/
public class Function4 extends Function1{
Integer[] arr={1,2,3,4,5,6};
public Function4() {
//1.匿名内部类
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
System.out.print("匿名内部类:"+Arrays.toString(arr)+"\t");
System.out.println();
//2.lamda表达式
Arrays.sort(arr, (o1,o2) ->o1-o2);
System.out.print("lamda表达式:"+Arrays.toString(arr)+"\t");
System.out.println();
//2.方法引用: 方法引用符 ::
Arrays.sort(arr,this::SSM);
System.out.print("方法引用标志this ::"+Arrays.toString(arr)+"\t");
System.out.println();
Arrays.sort(arr,super::sub);
System.out.print("方法引用标志super ::"+Arrays.toString(arr)+"\t");
}
public int SSM(int val,int v) {
return val-v;
}
}