0
点赞
收藏
分享

微信扫一扫

【JDK8新特性】方法引用

精进的医生 2022-02-15 阅读 202

 
愿你如阳光,明媚不忧伤。

目録

 


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]
*****************************************************************
举报

相关推荐

0 条评论