[英]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
。 而是使用Stream
和Optional
。 另外,如果沒有元素與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.