java class Redis silverlight ssh collections nhibernate count arduino binding Momentjs 百度seo关键词 vue自定义事件 vue实现原理 php抽奖源码 python查看数据类型 matlab根号怎么打出来 matlab对数函数 mysql查看锁表 kafka消费不到数据 arraylist删除指定元素 python多线程编程 python学习入门 java正则匹配 java编程入门 java写文件 java安装配置 java数组添加值 java的安装 java网络编程 gtx1030 EasyCHM netreflector php四舍五入 深渊碎片 今日头条邀请码 js字符转数字 文明6万神殿 手工画像 截取字符串 主播音效
当前位置: 首页 > 学习教程  > 编程语言

Lambda表达式简析-2( Lambda方法引用)

2020/8/11 20:57:37 文章标签:

Lambda方法引用

在lambda方法体中,有些功能已经实现了,就可以使用方法引用。
主要格式有以下几种:
1. 对 象 :: 实例方法名

import java.util.function.Function;
import java.util.function.Supplier;
/*
对 象  ::  实例方法名
 */
public class Demo001 {
    public static void main(String[] args) {
        //目的一: 返回一个String
        //无参 有返回的 lambda返回值方法 可以使用Supplier接口
        //原始写法
        Supplier<String> s=()->{return ("Hello");};
        //调用Supplier接口中的get()方法返回并打印
        System.out.println("原始写法:"+s.get());

        //方法引用写法
        Supplier<String> s1=new Test()::getMsg;
        //调用Supplier接口中的get()方法返回并打印
        System.out.println("引用写法:"+s1.get());

        //目的二:将helloWorld 重复指定次数,返回出去
        //有参有返回值可以使用Function接口 R apply(T t)
        //原始写法
        Function<Integer,String> f=(num)->{
            //创建StringBuilder对象存放字符串
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<num;i++){
                //添加字符串
                sb.append("helloWorld ");
            }
            //返回String 类型字符串
                return sb.toString();
        };
        System.out.println("打印一:");
        System.out.println(f.apply(5));
        //方法引用写法
        Function<Integer,String> f1=new Test()::copyN;
        System.out.println("打印二:");
        System.out.println(f1.apply(5));
    }
}

class Test{

    // 方法的功能返回一个String  无参有返回值
    public String getMsg(){
        //返回值
        return "Hello.";
    }

    //将helloWorld 重复指定次数,返回出去    有参 有返回值
    public String copyN(int num){
        //创建StringBuilder对象存放字符串
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<num;i++){
            //添加字符串
            sb.append("helloWorld ");
        }
        //返回String 类型字符串
        return sb.toString();
    }

}

2. 类 :: 静态方法名

import java.util.Comparator;
/*
 类   ::   静态方法名
 */
public class Demo003 {
    public static void main(String[] args) {
        int a=100;
        int b=20;
        //手动比较
        if(a>b){
            System.out.println(1);
        }else if(a<b){
            System.out.println(-1);
        }else{
            System.out.println(0);
        }
        System.out.println("-----------------");
        //Integer中compare方法比较
        System.out.println(Integer.compare(a,b));

        System.out.println("------------------");
        //Comparator接口lambda比较
        Comparator<Integer> c=(x,y)->{return x>y?1:(x<y?-1:0);};
        System.out.println("原始写法打印:"+c.compare(a, b));
        //调用Integer中的静态方法compare
        Comparator<Integer> c1=Integer::compare;
        System.out.println("新写法打印:"+c1.compare(a,b));
    }
}

3.类::实例方法名

import java.util.function.BiPredicate;
/*
类::实例方法名
 */
public class Demo004 {
    public static void main(String[] args) {
        // 判断两个String数据是否相等
        String s1="abc";
        String s2="abc";
        //实例方法调用非静态方法
        //
        System.out.println(s1.equals(s2));
        //调用BiPredicate接口中的test方法   有参有返回值
        //原始写法
        BiPredicate<String,String> b=(x1,x2)->{
            return x1.equals(x2);
        };
        System.out.println("原方法打印:"+b.test(s1,s2));
		//新写法
        BiPredicate<String, String> b1=String::equals;
        System.out.println("新方法打印:"+b1.test(s1,s2));
    }
}

4.构造器引用
类::new

/*
类::new
 */
public class Demo005 {
    public static void main(String[] args) {
        //创建个人对象
        Person p=new Person("张水水");
        //打印信息
        p.printInf();
        //自定义接口函数,原始写法
        MyFunIn<Person,String> m=(name)->{return new Person(name);};
        System.out.println(m.get("赵敏"));
        //自定义接口函数,新写法
        MyFunIn<Person,String> m1=Person::new;
        System.out.println(m1.get("张无忌"));
    }
}

@FunctionalInterface
interface MyFunIn<T,E>{
    T get(E str);
}
//Person类
class Person{
    private String name;

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
    public void printInf(){
        System.out.println(toString());
    }
}

注意:需要调用的构造器的参数列表要与函数式接口中抽象方法参数列表保持一致。


本文链接: http://www.dtmao.cc/news_show_100451.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?