zoukankan      html  css  js  c++  java
  • java8之lambda表达式(2)-方法引用

    方法引用使用的地方也是在函数式接口,使用方法引用可以使代码更加简单和便捷
    在如下代码中
    根据List中字符串长度排序的代码可以写成如下:
    public static void test1_() {
     
        List<String> strLst = new ArrayList<String>() {
            {
                add("adfkjsdkfjdskjfkds");
                add("asdfasdfafgfgf");
                add("public static void main");
            }
        };
        Collections.sort(strLst, String::compareToIgnoreCase);
        System.out.println(strLst);
    }
    只要方法的参数和返回值类型与函数式接口中抽象方法的参数和返回值类型一致,就可以使用方法引用。
    方法引用主要有如下三种使用情况
    1. 类::实例方法
    2. 类::静态方法
    3. 对象::实例方法
    其中后两种情况等同于提供方法参数的lambda表达式,如System.out::println 等同于(x)->System.out.println(x),Math::pow 等同于(x,y)->Math.pow(x,y).
    第一种中,第一个参数会成为执行方法的对象,String::compareToIgnoreCase)等同于(x,y)->x.compareToIgnoreCase(y)
    此外,方法引用还可以使用this::methodName及super::methodName表示该对象或者其父类对象中的方法
    class Father {
        public void greet() {
            System.out.println("Hello, i am function in father!");
        }
    }
     
    class Child extends Father {
        @Override
        public void greet() {
            Runnable runnable = super::greet;
            new Thread(runnable).start();
        }
    }
    public static void main(String[] args){
            new Child().greet();
        }
    最后打印的结果为:Hello, i am function in father!
  • 相关阅读:
    POJ 1125 可不可能遍历所有点情况下的最短路径
    POJ 2253 Floyd算法的巧妙改动
    POJ 2485 多个数据的最小生成树
    最小生成树kruskal算法
    POJ 1789 权值为字符串差值的最小生成树
    POJ 2560 浮点型的带权值
    POJ 1258 城市的道路建设
    java如何进行内存自动释放,垃圾回收的?
    Java内存泄漏
    spinlock(自旋锁)
  • 原文地址:https://www.cnblogs.com/andywithu/p/7344553.html
Copyright © 2011-2022 走看看