第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在隊(duì)列中添加元素時(shí)調(diào)用偵聽器以通知隊(duì)列元素是可變的

在隊(duì)列中添加元素時(shí)調(diào)用偵聽器以通知隊(duì)列元素是可變的

烙印99 2022-12-21 10:11:19
我想每當(dāng)我們?cè)陉?duì)列中添加元素時(shí),我應(yīng)該調(diào)用一個(gè)方法來在隊(duì)列中添加元素后立即獲取。package com.java.listner;import java.util.LinkedList;import java.util.Queue;public class QueueListner {public static Queue<String> queue=new LinkedList<String>();    public boolean add(String e) {        itemAvailableInqueue();        return false;    }    public static void main(String[] args) {        queue.add("record1");        System.out.println(queue.poll());    }    public void itemAvailableInqueue() {        int size = queue.size();        for (int i = 1; i < size; i++) {            System.out.println(queue.poll());        }    }}
查看完整描述

1 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

要將監(jiān)聽器添加到隊(duì)列中,您需要使其“可監(jiān)聽”,最簡(jiǎn)單的方法是裝飾器模式。此模式的目標(biāo)是在類中添加特性,同時(shí)保留其基本功能。

在 的情況下Queue,您只需擴(kuò)展一個(gè)AbstractQueue類,覆蓋它的offer方法。其他方法只是委托給后備隊(duì)列,因?yàn)樗鼈儾恍枰ㄖ獋陕犉鳌?/p>

public class ListenableQueue<E> extends AbstractQueue<E> {


    interface Listener<E> {

        void onElementAdded(E element);

    }


    private final Queue<E> delegate;  // backing queue

    private final List<Listener<E>> listeners = new ArrayList<>();


    public ListenableQueue(Queue<E> delegate) {

        this.delegate = delegate;

    }


    public ListenableQueue<E> registerListener(Listener<E> listener) {

        listeners.add(listener);

        return this;

    }



    @Override

    public boolean offer(E e) {

        // here, we put an element in the backing queue, 

        // then notify listeners

        if (delegate.offer(e)) {

            listeners.forEach(listener -> listener.onElementAdded(e));

            return true;

        } else {

            return false;

        }

    }


    // following methods just delegate to backing instance

    @Override public E poll() { return delegate.poll(); }

    @Override public E peek() { return delegate.peek(); }

    @Override public int size() { return delegate.size(); }

    @Override public Iterator<E> iterator() { return delegate.iterator(); }


}

因此,此ListenableQueue實(shí)現(xiàn)Queue接口具有Queue考慮支持委托隊(duì)列屬性的所有功能(即容量限制、阻塞行為等),因此可以像任何其他Queue.


使用示例:


// we create new `LinkedList` as a backing queue and decorate it

ListenableQueue<String> q = new ListenableQueue<>(new LinkedList<>());


// register a listener which polls a queue and prints an element 

q.registerListener(e -> System.out.println(q.poll()));


// voila!

q.add("record1");


查看完整回答
反對(duì) 回復(fù) 2022-12-21
  • 1 回答
  • 0 關(guān)注
  • 83 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)