How to convert this code to java8 lambda

I just started working with Java 8, and I'm struggling with this piece of code:

paramsValues[idx++] = new ReplyMessage<JsonObject>() {
    @Override
    public void reply(JsonObject reply) {
        message.reply(reply);
    }
};

How to convert this to lambda style?

+4
source share
3 answers

If ReplyMessageis a functional interface, you can do

paramsValues[idx++] = reply -> message.reply(reply);

Here is a complete example with stub implementations of other classes in your question:

// Stub classes
class JsonObject { }

@FunctionalInterface
interface ReplyMessage<T> {
    void reply(T jo);
}

class LambdaDemo {
    public static void main(String args[]) {

        // Dummy variables
        ReplyMessage<JsonObject> message = new ReplyMessage<JsonObject>() {
            public void reply(JsonObject jo) {}
        };
        ReplyMessage[] paramsValues = new ReplyMessage[5];
        int idx = 0;

        // Your code, lambdafied
        paramsValues[idx++] = reply -> message.reply(reply);

        // Or,
        // paramsValues[idx++] = message::reply;

        // But then you could perhaps do with just ...
        // paramsValues[idx++] = message;
    }
}
+4
source

Lambda expressions are only possible with Functional Interfaces (Interfaces with only one method, for example Runnable or ) ActionEvent

If ReplyMessageis a functional interface, you can do:

paramsValues[idx++] = reply -> message.reply(reply);

-: , , ->,

ReplyMessage:

@FunctionalInterface
interface ReplyMessage<T> {
    void reply(T jo);
}

.

+1
paramValues[idx++] = reply -> message.reply(reply);

or

paramValues[idx++] = reply -> {
    return message.reply(reply);
}

It will work as long as it ReplyMessage<JsonObject>is a functional interface, and paramValues ​​has a type ReplyMessage<JsonObject>.

0
source

All Articles