2015-06-18 98 views
0

假設我已經定義一個列表作爲MyDelayed檢查的對象是否存在於對象的一些成員變量

private BlockingQueue<MyDelayed> DelayedIds = new DelayQueue<>(); 

類的基礎上,一個列表是這樣的: 私有類MyDelayed器具延遲{

private String myId; 
    private Long creationTime; 

    MyDelayed (String myId) { 
     this.myId= myId; 
     this.creationTime = System.currentTimeMillis(); 
    } 

    String getMyId() { 
     return this.myId; 
    } 

    @Override 
    public long getDelay(TimeUnit unit) { 
     //TODO 
    } 

    @Override 
    public int compareTo(Delayed o) { 
     //TODO 
    } 
} 

現在假設我想在DelayedIds列表中添加類MyDelayed的對象。 我可以通過使用add函數來實現。

但是,如果我想在列表中添加obbject,只有列表不包含MyDelayed類別的對象,它具有與我試圖插入的myId相同的屬性。

顯然DelayedIds .contains(new MyDelayed(myId))將無法​​正常工作。

有沒有簡單的方法來檢查這件事? 我錯過了什麼嗎?

+0

你可以從'MyDelayed'開始實現'equals'(和'hashCode')。 –

+0

是的,我也在考慮重寫equals函數,但我將如何調用該函數? –

+0

['BlockingQueue.contains()'](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html#contains(java.lang.Object))將調用它爲你,所以你不必做任何事情,但實施'equals',使兩個具有相同id的對象被認爲是相等的。 –

回答

1

你可以寫這樣的東西,並比較列表中的每一個元素,看它是否包含你的id。如果在任何時候你發現一個匹配的,你返回true,如果循環完成後沒有發現它返回false。

public boolean contains(String id){ 
    for (MyDelayed md : DelayedIds){ 
     if(md.getMyId().equals(id)){ 
      return true; 
     } 
    } 
    return false; 
} 

我們加入,你會做這樣的事情前檢查:

if(!contains(myNewObject.getMyId())){ 
    DelayedIds.add(myNewObject) 
} 

另外,我建議你重命名DelayedIds到delayedIds爲了遵循coding standards(見變量)。