其實關於方法引用和構造引用大家可以簡單理解為lambda的簡寫形式
一.方法引用
方法引用分為三類:
1.指向靜態方法的方法引用
例子:
public static void main(String[] args) {String num="122";int parse = parse(Integer::parseInt,num);System.out.println(parse);}public static int parse(ToIntFunction<String> f,String num){return f.applyAsInt(num);}
2.指向任意類型執行個體方法的方法引用(這個執行個體長為方法的參數)
例子:
public static void main(String[] args) {List<String> list = Arrays.asList("av","asdf","sad","324","43");List<String> collect = list.stream().map(String::toUpperCase).collect(Collectors.toList());System.out.println(collect);}
3.指向現有對象的執行個體方法的方法引用(這個執行個體為外部對象)
例子:
public static void main(String[] args) {List<String> list = Arrays.asList("av","asdf","sad","324","43");String a="avasdf";List<String> collect = list.stream().filter(a::contains).collect(Collectors.toList());System.out.println(collect);}
這裡的2和3有點繞,主要區別在於執行個體一個為參數一個為外部對象.
二:構造引用
private String color;private int weight;public Apple() {}public Apple(String color) {super();this.color = color;}public Apple(int weight) {super();this.weight = weight;}public Apple(String color, int weight) {super();this.color = color;this.weight = weight;}@Overridepublic String toString() {return "Apple [color=" + color + ", weight=" + weight + "]";}
public static void main(String[] args) {Apple instance1 = instance(11,Apple::new);}public static Apple instance(int a,IntFunction<Apple> ifu){return ifu.apply(a);}