我必须为大学编写带有 lambda 表达式的正则表达式。我在一个方法中被两种方法卡住了。
这是我的代码:
static String ausdruck = "abcd";
public static Function<String, String> Char = (c) -> {
return (ausdruck.startsWith(c)) ? ausdruck = ausdruck.substring(1,
ausdruck.length()) : "Value Error";
};
public static BiFunction<Function<String, String>,
Function<String, String>,
Function<String, String>>
And = (f1, f2) -> {return null;};
我想在 And
方法中做的是:Char(Char.apply("a"))
-> 我想调用函数 f2
以 f1
作为参数。
And 方法的调用必须如下所示:
And.apply(Char.apply("a"), Char.apply("b"));
最佳答案
我想这就是你想要的
Func<Str,Str> f = and( comsume("a"), consume("b") );
f.apply("abcd"); // "cd"
Func<Str,Str> consume(String x)
return input->{
if(input.startsWith(x)) return input.substring(x.length());
else throws new IllegalArgument()
};
Func<Str,Str> and(Fun<Str,Str> f1, Func<Str,Str> f2)
return input-> f2.apply(f1.apply(input))
and
不是必需的,参见 Function.andThen
方法
f = consume("a").andThen( consume("b) )
不幸的是,没有“ curry ”;否则,我们可以这样做
f = consume2.curry("a") .andThen ( consume2.curry("b") );
static BiFunc<Str,Str,Str> consume2 = (input,x)-> {...return input.substring(x.length()); ..
如果您设计自己的函数式界面,并使用所需的方法(例如 curry),效果会更好。
interface F1
String apply(String);
F1 and(F1);
interface F2
String apply(String,String);
F1 curry(String);
关于java - Lambda 表达式函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821266/