java - Lambda 表达式函数式编程

标签 java regex lambda functional-programming

我必须为大学编写带有 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")) -> 我想调用函数 f2f1 作为参数。 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/

相关文章:

javascript - 如何通过 javascript 正则表达式匹配 Markdown 列表文本 block ?

python - 如何在使用 AWS Lambda 中的 POST 方法和正文执行 307 重定向时传递请求正文?

java - 更改回文以适应数字回文

java - Activity 重新创建后操作栏标题消失

java - SWIG 问题,正在生成空文件

Java 正则表达式 字母后跟数字

javascript - 当单行上有多个匹配项时,如何仅找到 `' `(具有最小长度)之间的字符串?

c++ - 在 CUDA 扩展 lambda 中捕获变量时出现内存错误

java - 在封闭范围内定义的局部变量日志必须是最终的或实际上是最终的

javascript - 向 Servlet 传递参数