簡體   English   中英

使用迭代器比較arraylist中對象存儲的字段

[英]Comparing fields of object store in arraylist using iterator

我正在將整數值地址傳遞給此函數。 該整數值包含在存儲在Arraylist“ instrHolder”中的對象之一中。 現在,我想首先找出哪個對象包含此值,然后返回“指令”類型的整個對象。 這是我正在嘗試的-

private static Instruction getInstruction( int address) {
    Iterator<Instruction> iterator = instrHolder.iterator();
    while(iterator.hasNext()){
        if(/*condition need to know*/)
        return /*need to know*/;
    }
}

我應該如何編寫if條件,我的return語句應該是什么? 請幫幫我嗎?

iterator.next()將為您提供List的當前實例。 您應該檢查該實例的條件,如果滿足條件,則將其返回:

private static Instruction getInstruction(int address) {
    Iterator<Instruction> iterator = instrHolder.iterator();
    while (iterator.hasNext()) {
        Instruction current = iterator.next();
        if (current.getSomeProperty().equals(someValue))
            return current;
    }
    return null;
}

正如Spotted所暗示的,如果列表中的任何元素均不符合條件,則應決定返回什么。 在這種情況下,我選擇返回null。

您可以使用iterator.next()並且由於您想比較integer address ,因此可以參考以下代碼:

while (iterator.hasNext()) {
            Instruction instruction = iterator.next();//Get single instruction
            //Get getAddress() from instruction object
            if (instruction.getAddressValue() == address) {
                return instruction;
            }
        }

由於instrHolder是一個ArrayList ,所以不必理會Iterator 而是使用StreamOptional 另外,如果沒有元素與address匹配,則在代碼中未指定行為。 在下面的代碼中,它引發異常,但它也可以返回默認值(使用orElse() )。

private static Instruction getInstruction( int address) {
    return instrHolder.stream()
                      .filter(i -> i.getAddress() == address)
                      .findFirst()
                      .orElseThrow(NoSuchElementException::new);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM