本篇文章内容主要讲述用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));
}
}