Java 将函数引用作为参数传递
是否可以将对方法的引用作为参数传递 例如:Java 将函数引用作为参数传递,java,lambda,functional-programming,java-8,Java,Lambda,Functional Programming,Java 8,是否可以将对方法的引用作为参数传递 例如: public static void main(String[] args) { String data = "name: John, random text, address: leetStreet"; Person person; //if regex matches, use method reference, to send the result. applyDataToPerson(data, "name:
public static void main(String[] args) {
String data = "name: John, random text, address: leetStreet";
Person person;
//if regex matches, use method reference, to send the result.
applyDataToPerson(data, "name: (\\w+)", person, Person::setName);
applyDataToPerson(data, "address: (\\w+)", person, Person::setAddress);
}
private static void applyDataToPerson(String data, String regex, Person person,
Function<Person> f) {
Matcher match = Pattern.compile(regex).matcher(data);
if (match.matches()) person.f(match.group(1));
}
class Person {
private String name;
private String address;
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
}
publicstaticvoidmain(字符串[]args){
String data=“名称:John,随机文本,地址:leetStreet”;
个人;
//如果正则表达式匹配,则使用方法引用发送结果。
applyDataToPerson(数据,“名称:(\\w+)”,person,person::setName);
applyDataToPerson(数据,“地址:(\\w+)”,person,person::setAddress);
}
私有静态void applyDataToPerson(字符串数据、字符串正则表达式、Person、,
函数f){
Matcher match=Pattern.compile(regex).Matcher(data);
if(match.matches())person.f(match.group(1));
}
班主任{
私有字符串名称;
私有字符串地址;
公共void集合名(字符串名){
this.name=名称;
}
公共无效设置地址(字符串地址){
this.address=地址;
}
}
如果没有,除了引用方法,还有什么替代方法?开关盒构造?我想您正在寻找:
我想你在寻找:
在Java8中,您可以访问现有方法(除其他外)@Tibrogargan方法签名是什么样子的<代码>比较器
函数
应该代表什么?如果我们说的是,它有2个泛型类型,而不是1个。这样代码就不能编译了。。。(更不用说person.f(…)
)。在寻求替代方案之前,请确保您有可用的代码……在Java8中,您可以将现有的方法(除其他外)@Tibrogargan方法签名是什么样子的<代码>比较器函数
应该代表什么?如果我们说的是,它有2个泛型类型,而不是1个。这样代码就不能编译了。。。(更不用说person.f(…)
)。在询问替代方案之前,请确保您有工作代码…并在主方法中编写biconsumer函数:applyDataToPerson(数据,“name:(\\w+)”,person,(person p,String s)->p.setName(s));applyDataToPerson(数据,“地址:(\\w+)”,person,(person p,字符串s)->p.setAddress(s))
@gaston否,主方法与OP完全相同。我个人喜欢第二个选项。在主方法中编写biconsumer函数:applyDataToPerson(数据,“name:(\\w+)”,person,(person p,String s)->p.setName(s));applyDataToPerson(数据,“地址:(\\w+)”,person,(person p,字符串s)->p.setAddress(s))
@gaston不,主要方法与OP完全一样。我个人喜欢第二种方法。
private static void applyDataToPerson(String data, String regex, Person person, BiConsumer<Person, String> action) {
Matcher match = Pattern.compile(regex).matcher(data);
if (match.matches()) action.accept(person, match.group(1));
}
public static void main(String[] args) {
String data = "name: John, random text, address: leetStreet";
Person person;
//if regex matches, use method reference, to send the result.
applyData(data, "name: (\\w+)", person::setName);
applyData(data, "address: (\\w+)", person::setAddress);
}
private static void applyData(String data, String regex, Consumer<String> action) {
Matcher match = Pattern.compile(regex).matcher(data);
if (match.matches()) action.accept(match.group(1));
}