【问题标题】:Comparing fields of object store in arraylist using iterator使用迭代器比较数组列表中对象存储的字段
【发布时间】:2017-03-30 06:24:45
【问题描述】:

我将一个整数值地址传递给这个函数。此整数值包含在 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 语句应该是什么?请帮帮我?

【问题讨论】:

  • 如果条件永远不成立会发生什么?抛出异常?返回默认值?

标签: java if-statement arraylist iterator return-value


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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。

    【讨论】:

    • 根据您的经验,当集合中没有元素符合条件时,您将如何处理?
    • @Spotted 这取决于用例。如果集合中没有元素匹配条件是有效场景,则可以返回 null。否则你可以抛出异常。感谢您的评论。
    【解决方案3】:

    你可以使用iterator.next(),因为你想比较integeraddress,你可以参考下面的代码:

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

    【讨论】:

    • 根据您的经验,当集合中没有元素符合条件时,您将如何处理?
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2017-02-23
    • 2016-03-03
    • 2016-12-11
    • 2012-11-05
    相关资源
    最近更新 更多