相关疑难解决方法(0)

Java 8:具有可变参数的Lambda

我正在寻找一种方法来调用多个参数方法,但使用一个lambda构造.在文档中,据说lambda只有在它可以映射到功能界面时才可用.

我想做的事情如下:

test((arg0, arg1) -> me.call(arg0, arg1));
test((arg0, arg1, arg2) -> me.call(arg0, arg1, arg2));
...
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以优雅地做到这一点而不定义10个接口,每个参数计数一个?

更新

我使用从非方法接口扩展的多个接口,并重载该方法.

两个参数的示例:

interface Invoker {}
interface Invoker2 extends Invoker { void invoke(Object arg0, Object arg1);}
void test(Invoker2 invoker, Object ... arguments) {
    test((Invoker)invoker, Object ... arguments);
}

void test(Invoker invoker, Object ... arguments) {
    //Use Reflection or whatever to access the provided invoker
}
Run Code Online (Sandbox Code Playgroud)

我希望有可能用一个解决方案替换10个调用者接口和10个重载方法.

我有一个合理的用例,请不要问诸如"你为什么要做这样的事情?"之类的问题.并且'你想解决的问题是什么?' 或类似的东西.只要知道我已经考虑过这一点,这是我试图解决的合法问题.

很抱歉添加混淆调用它调用程序,但它实际上是在我当前的用例(测试构造函数合同)中调用它.

基本上,如上所述,考虑一个在其中使用不同数量的属性的方法lambda.

java lambda java-8

15
推荐指数
2
解决办法
2万
查看次数

如何传递和使用任意lambda函数作为参数

我对Lisp中的lambda函数有很好的理解.Java似乎没有Lisp那样的灵活性.我如何在Java中考虑lambdas?鉴于下面的代码,我该怎么做?

public class Draw {
    GraphicsContext gc;

    static void draw(double x, double y, double w, double h, boolean drawRect) {
        if (drawRect) {
            gc.fillRect(x, y, w, h);
        } else {
            gc.strokeRect(x, y, w, h);
        }
    }

    // How do I do that?
    static void drawWithLambda(double x, double y, double w, double h /**, lambda */) {
        lambda(x, y, w, h);
    }

    public static void main(String[] args) {
        draw(0, 0, 50, 50, false); // OK
        drawWithLambda(0, 0, 50, 50, GraphicsContext::fillRect); // …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

6
推荐指数
1
解决办法
362
查看次数

lambda中的Java 8 lambda不能修改外部lambda中的变量

假设我有一个List<String>和一个List<Transfomer>.我想将每个变换器应用于列表中的每个字符串.

使用Java 8 lambdas,我可以这样做:

strings.stream().map(s -> {
    for(Transformer t : transformers) {
        s = t.apply(s);
    }
    return s;
}).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

但我想做更像这样的事情,但是它会导致编译时错误:

strings.stream().map(s -> transformers.stream().forEach(t -> s = t.apply(s))).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

我刚刚开始玩lambdas,所以也许我只是没有正确的语法.

java lambda java-8

5
推荐指数
1
解决办法
9163
查看次数

将函数作为参数传递给 Lambda java 8

我有以下方法:

public String getAllDangerousProductsName(Offer offer){
    return offer.getOfferRows().stream()
           .filter(row -> row.isDangerousGood())
            .map(row -> row.getItemInformation().getOfferTexts().getName())
            .collect(Collectors.joining(","));
}
Run Code Online (Sandbox Code Playgroud)

我想为 row.isBulkyGood() 重用这个方法。我目前正在做的是

public String getAllBulkyProductsName(Offer offer){
    return offer.getOfferRows().stream()
            .filter(row -> row.isBulkyGood())
            .map(row -> row.getItemInformation().getOfferTexts().getName())
            .collect(Collectors.joining(","));
}
Run Code Online (Sandbox Code Playgroud)

...这基本上是代码重复。有没有办法可以将函数作为方法参数传递来优化它,以便对两种过滤条件都有一种方法?

java lambda java-8 java-stream

3
推荐指数
1
解决办法
335
查看次数

JavaFX和SVG:绘制一条线

我正在使用JavaFX来渲染一些SVG的东西.我定义了很多方法,返回不同SVG形状的路径(省略号,圆形,矩形,线条等).除线法外,所有这些似乎都有效.JavaFX不会返回错误(意味着路径可能正确),但它不会绘制任何内容.这是我的方法.

public static SVGPath line(float startX, float endX, float startY, float endY, PositionType positionType)
{
    SVGPath path = new SVGPath();
    path.setContent(positionType.getMoveto()+startX+","+startY+positionType.getLineto("l")+endX+","+endY);    

    return path;    
}
Run Code Online (Sandbox Code Playgroud)

该方法getMoveto()返回Mm,取决于PositionType,并getLineto()返回Ll.

这是一个示例方法调用:

SVGPath test2 = SVGPrimitives.line(20f, 30.1f, 23f, 89.21f, PositionType.ABSOLUTE);
Run Code Online (Sandbox Code Playgroud)

以下是返回的路径:

M20.0,23.0 L 30.1,89.21
Run Code Online (Sandbox Code Playgroud)

这似乎对我有用,但没有任何内容......

java svg javafx

2
推荐指数
1
解决办法
4921
查看次数

Java 8:将对象的方法及其参数作为参数传递

我有两个类AB,就像这样:

class A {
    public Integer fetchMax() {
       // Make a network call & return result
    } 
}

class B {
    public Double fetchPercentile(Integer input) {
        // Make a network call & return result
    } 
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要提供retry这两种方法的机理fetchMax()fetchPercentile(Integer).我想使用一个helper类来提供这种行为,其中retry可以采用instance(A或B)的方法,method-namemethod-arguments.重试基本上会对提供的对象方法进行重新尝试.

像这样的东西:

class Retry {
     public static R retry(T obj, Function<T, R> method,  Object... arguments) {
           // Retry logic
           while(/* retry condition */)
           { …
Run Code Online (Sandbox Code Playgroud)

java lambda design-patterns java-8

2
推荐指数
1
解决办法
230
查看次数

无论如何在clojure中构造一个lambda函数?

我在这里问:https://stackoverflow.com/questions/36385548/how-to-programmatically-construct-a-lambda-in-java-8但我想知道是否有替代方法可以在clojure中构建lambdas.

对于用例,我试图包装rethinkdb库:http://www.rethinkdb.com/api/java/#map


我可能错了,但是在rethinkdb驱动程序中,不知何故lambdas被编译成ast语法,转换为js并发送到数据库.我相信我需要以某种方式明确地创建一个lambda.http://www.rethinkdb.com/blog/lambda-functions/ 所以这个问题如何在Clojure中将lambda实现为一个名为"lambda"的函数?仅显示如何使用函数,而不是lambda.

clojure rethinkdb

1
推荐指数
1
解决办法
228
查看次数

-1
推荐指数
1
解决办法
764
查看次数