愿你如阳光,明媚不忧伤。
目録
1. 方法引用简介
2. 类的静态方法引用
- 使用前提
方法体中只有一行代码,这行代码调用了某个类的静态方法,且重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中。
*****************************************************************
public class TestMethodReference {
public static void main(String[] args) {
// 创建一个流
Stream<Integer> stream = Stream.iterate(0, (x) -> x + 3).limit(4);
String collect = stream.map(String::valueOf)
.collect(Collectors.joining(","));
System.out.println(collect);
}
}
................................................................
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
【Console】-------------------------------------------------------
0,3,6,9
*****************************************************************
3. 类的实例方法引用
- 使用前提
方法体中只有一行代码,这行代码调用了第一个参数的成员方法,且重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中。
*****************************************************************
public class TestMethodReference {
@FunctionalInterface
interface UseString {
String use(String str, int start, int length);
}
public static String subString(String str, UseString useString) {
int start = 0;
int length = 2;
return useString.use(str, start, length);
}
public static void main(String[] args) {
System.out.println(subString("ITGodRoad", String::substring));
}
}
................................................................
public static void main(String[] args) {
System.out.println(subString("ITGodRoad", new UseString() {
@Override
public String use(String s, int beginIndex, int endIndex) {
return s.substring(beginIndex, endIndex);
}
}));
}
【Console】-------------------------------------------------------
IT
*****************************************************************
4. 对象的实例方法引用
- 使用前提
方法体中只有一行代码,这行代码调用了某个对象的成员方法,且重写的抽象方法中所有的参数都按照顺序传入了这个成员方法中。
*****************************************************************
public class TestMethodReference {
public static void main(String[] args) {
// 创建一个流
Stream<Integer> stream = Stream.iterate(0, (x) -> x + 3).limit(4);
StringBuffer sb = new StringBuffer();
stream.map(sb::append)
.forEach(System.out::println);
}
}
................................................................
@Override
public synchronized StringBuffer append(Object obj) {
toStringCache = null;
super.append(String.valueOf(obj));
return this;
}
【Console】-------------------------------------------------------
0
03
036
0369
*****************************************************************
5. 构造器引用
- 使用前提
方法体中只有一行代码,这行代码调用了某个类的构造方法,且重写的抽象方法中所有的参数都按照顺序传入了这个构造方法中。
*****************************************************************
public class TestMethodReference {
public static void main(String[] args) {
// 创建一个流
Stream<Integer> stream = Stream.iterate(0, (x) -> x + 3).limit(4);
TreeSet<Integer> collect = stream.collect(Collectors.toCollection(TreeSet::new));
System.out.println(collect);
}
}
................................................................
public TreeSet() {
this(new TreeMap<>());
}
【Console】-------------------------------------------------------
[0, 3, 6, 9]
*****************************************************************