1. 程式人生 > >lambda表示式的應用

lambda表示式的應用

import javax.jms.*;
import java.util.ArrayList;
import java.util.List;

public class ListenerReceive {
public static void main(String[] args) {
receive();
List list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
System.out.println("");
for(int i:list){
System.out.println(i);
}
System.out.println("

");
list.forEach(i-> System.out.println(i));

}

private static void receive() {
    MessageConsumer consumer =null;
    Session session=null;
    Connection connection=null;
    try {
        //1.根據Broker地址建立連線工廠物件
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.31.128:61616");
        //2.建立連線物件
        connection=connectionFactory.createConnection();
        connection.start();//接收訊息前前必須要start否則無法讀取訊息,執行緒會阻塞在receive()方法上
        //3.建立Session回話物件,
        // 引數1為是否使用事務性的訊息 false表示不使用事務 true表示使用事務
        //引數2表示訊息的確認機制,會影響訊息的接收方法而不會影響傳送方法Session.AUTO_ACKNOWLEDGE表示自動確認
        session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

        //4.建立一個目的地物件,createQueue建立一個基於點對點的目的地物件,引數為目的地名稱,需要與傳送時對應
        Destination destination=session.createQueue("myQueue");

        //5.建立訊息的接收者 ,並設定從哪裡獲取訊息
        consumer =session.createConsumer(destination);

// //6設定監聽器,非同步讀取訊息
// consumer.setMessageListener(new MessageListener() {
// public void onMessage(Message message) {
// if(message instanceof TextMessage){
// try {
// System.out.println(((TextMessage) message).getText());
// } catch (JMSException e) {
// e.printStackTrace();
// }
// }
// }
// });
/*
Lambda 表示式實現非同步接收訊息, 注意:Lambda必須在Java8或以上版本才可使用
Lambda 的目的是為了簡化匿名內部類的實現,概念有點想JS中匿名方法引數,主要用於實現回撥方法
Lambda 使用前提
1.當我們呼叫的某個方法中的引數列表的型別有介面型別
2.這個介面中必須只能有一個抽象方法是時
Lambda 語法1:
介面中的方法只有一個引數,我們對方法的實現只有一行程式碼,如果這個抽象方法擁有返回型別不需要新增return
形參 -> 方法體
語法2:
介面中的方法只有一個引數,形參列表必須新增(),
我們對方法的實現有多行程式碼,方法體必須新增{}
如果這個抽象方法擁有返回型別必須需要新增return
(形參1,形參2) -> { 方法體}

         */

        consumer.setMessageListener(messages->{
            if(messages instanceof  TextMessage){
                try {
                    System.out.println(((TextMessage) messages).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });


        System.out.println("監聽器啟動完成");
    } catch (JMSException e) {
        e.printStackTrace();
    }


}

}