Lambda表达式(2)

本篇文章内容主要讲述用Lambda表达式调用方法。

随着Java语言的发展,在JDK1.8的时候对方法引用这一概念进一步深入,我们可以使用Lambda表达式来方便的调用方法。
其标准书写格式如下:

类名::方法名//注:这里只写方法的名字,不写括号

我们可以看一下如下代码,涉及的正则表达式可以浏览【科文学院19数据作业的正则表达式】

import java.util.regex.Matcher;
import java.util.regex.Pattern;

//定义一个用于Lambda表达式的接口
@FunctionalInterface
interface IChange{
    void change(String str);
}

public class Test_Lambda2{
    //定义一个static方法,用来转换字符串
    public static void htmlChange(String str){
        String regex = "\\w+=\"\\w+\"";
        Pattern pat = Pattern.compile(regex);
        Matcher mat = pat.matcher(str);
        while(mat.find()){
            System.out.println(mat.group().replaceAll("="," ").replaceAll("\"",""));
        }
    }

    public static void main(String[] args) {
        //用Lambda表达式进行调用方法
        IChange change = (str) -> {
            htmlChange(str);
        };
        change.change("type=\"text\"");
    }
}

如上是一个传统的Lambda写法,依照标准的书写格式,我们可以将Lambda表达式改为

IChange change = Test_Lambda2::htmlChange;

还有一种情况就是调用构造方法,调用构造方法的书写格式稍有特殊,代码如下。

//Person类,包含姓名和年龄
class Person{
    private String name;
    private int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public String toString(){
        return "[name:" + this.name + ",age:" + this.age + "]";
    }
}

//用来创建Person类对象的接口
@FunctionalInterface
interface ICreate{
    Person create(String name,int age);
}

public class Test_Lambda3 {
    public static void main(String[] args) {
        //这是普通的Lambda表达式的写法,即
        //(参数表) -> {方法体};   或
        //(参数表) -> 返回语句
        ICreate per1 = (name,age) -> new Person(name,age);
        System.out.println(per1.create("治怒善男",18));

        //这是引用构造方法的标准写法
        //与上述方法完全相同
        ICreate per2 = Person::new;
        System.out.println(per2.create("治怒善男",19));
    }
}

发布了15 篇原创文章 · 获赞 5 · 访问量 694

猜你喜欢

转载自blog.csdn.net/weixin_46192593/article/details/104918762
今日推荐