使用迭代器比较数组列表中对象存储的字段

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;
            }
        }

因为 instrHolderArrayList,所以不用理会 Iterator。而是使用 StreamOptional。此外,在您的代码中,如果没有元素与 address 匹配,则不会指定行为。在下面的代码中它会抛出异常,但它也可以 return 默认值(使用 orElse())。

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