将java lambda转换为pre java 1.8函数

时间:2016-08-22 02:52:57

标签: java lambda java-8

我正在使用Babbler编写一个XMPP软客户端来进行负载测试。

在API文档Babbler documentation中,它提到添加侦听器以拦截传入的消息。但是,示例代码是以lambda格式编写的。

// Listen for messages
xmppClient.addInboundMessageListener(e -> {
    Message message = e.getMessage();
    // Handle inbound message.
});

我需要帮助将其转换为Java 1.7函数,因为我们的加载生成工具(nGrinder)不支持lambda语法。

2 个答案:

答案 0 :(得分:4)

这样的lambda只是匿名实现[functional]接口的简写。您可以随时自己实施#34;漫长的方式":

Sub test()
    Dim S1$, k1, k2
    S1 = "Product ID: 35, Product Qty: 2, Product SKU: Brush, Product Name: Brush, Product Weight: 80.0000, Product Variation Details: , Product Unit Price: 5.00, Product Total Price: 10.00|Product ID: 54, Product Qty: 5, Product SKU: Comb, Product Name: Comb, Product Weight: 1.3000, Product Variation Details: , Product Unit Price: 1.00, Product Total Price: 5.00"
    For Each k1 In Split(S1, "|")
        For Each k2 In Split(k1, ",")
            If UCase(k2) Like "*ID*" Or _
                UCase(k2) Like "*QTY*" Or _
                    UCase(k2) Like "*PRICE*" Then
                Debug.Print k2
            End If
    Next k2, k1
End Sub

答案 1 :(得分:1)

// Listen for messages
xmppClient.addInboundMessageListener(new Consumer<MessageEvent>() {

    public void accept(MessageEvent e) { 
        Message message = e.getMessage();
        // Handle inbound message.
    }
});

每次通过将某个lambda函数存储在实例变量中来调用某个lambda函数时,也可以避免创建一个新的Consumer实例。

private Consumer<MessageEvent> inboundMessageListener;

//should be called during startup only
public void initialize() {
    inboundMessageListener = new Consumer<MessageEvent>() {

        public void accept(MessageEvent e) { 
            Message message = e.getMessage();
            // Handle inbound message.
        }
    };
}

//can be reused for more than one XMPP client, assuming there's no difference in handling different clients
public void addInboundMessageListener() {

    xmppClient.addInboundMessageListener(inboundMessageListener);
}