使用迭代器比较数组列表中对象存储的字段
Comparing fields of object store in arraylist using iterator
我正在将整数值地址传递给此函数。该整数值包含在存储在 Arraylist "instrHolder" 中的对象之一中。现在我想先找出哪个对象包含这个值和 return 类型 "Instruction" 的整个对象。这是我正在尝试的 -
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
的当前实例。你应该检查你在那个实例上的条件,如果满足条件,return它:
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 所暗示的,如果您的列表中没有元素符合条件,您应该决定要 return 什么。在这种情况下,我选择 return 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
匹配,则不会指定行为。在下面的代码中它会抛出异常,但它也可以 return 默认值(使用 orElse()
)。
private static Instruction getInstruction( int address) {
return instrHolder.stream()
.filter(i -> i.getAddress() == address)
.findFirst()
.orElseThrow(NoSuchElementException::new);
}
我正在将整数值地址传递给此函数。该整数值包含在存储在 Arraylist "instrHolder" 中的对象之一中。现在我想先找出哪个对象包含这个值和 return 类型 "Instruction" 的整个对象。这是我正在尝试的 -
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
的当前实例。你应该检查你在那个实例上的条件,如果满足条件,return它:
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 所暗示的,如果您的列表中没有元素符合条件,您应该决定要 return 什么。在这种情况下,我选择 return 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
匹配,则不会指定行为。在下面的代码中它会抛出异常,但它也可以 return 默认值(使用 orElse()
)。
private static Instruction getInstruction( int address) {
return instrHolder.stream()
.filter(i -> i.getAddress() == address)
.findFirst()
.orElseThrow(NoSuchElementException::new);
}