Java:如何在数组列表中搜索数组中对象的实例变量

标签 java arrays search

下面这段代码让我很头疼。它只是做我想让它做的事情,即接受输入的字符串,然后按对象的分类(字符串)搜索书籍对象的数组列表,然后返回该书籍对象。目前,只要输入分类是列表中书籍的实际分类,下面的代码就可以工作。例如,TD999 被发现,所以它被返回。但是,如果我为该类键入一堆废话,例如 yhgfsdsfbv,它仍然会返回一本书,例如 TD345(似乎它变成了一本最初归类为 null 的书,然后在程序运行时使用 setClassification 方法进行归类。

public Book searchClass(String inputClass){
    Book foundBook = null;
    for(Book findClass : bookStore){
        if(findClass.getClassification()!=null &&
 findClass.getClassification().equalsIgnoreCase(givenClass)) 
        return findClass;
            foundBook = findClass;
    }
    return foundBook;
}

我尝试修复它是这样的:

public Book searchClass(String inputClass) throws IllegalArgumentException{

    Book foundBook = null;
    for(Book findClass : bookStore){
        if(!(findClass.getClassification().equalsIgnoreCase(inputClass))){
                   throws new IllegalArgumentException("book not found")
        }
        else if(findClass.getClassification().equalsIgnoreCase(inputClass)){
            foundBook = findClass;
        }
    }
    return foundBook;
}

然而,即使我正确输入了列表中的分类,这每次都会抛出异常。

我不知道如何解决这个问题来做我想做的事,我已经厌倦了很多其他方式,从来没有正常工作。我已经通读了我所有的讲义、几本教科书和 Oracle 网页,但不知道是什么导致了问题,因此我无法修复它。

最佳答案

让我们开始您的第一次尝试。如果你找到一本书,你会立即归还它。因此,如果你通过了整个循环而没有找到任何东西,你应该发出失败信号:返回 null,或者抛出异常。返回 foundBook 没有意义,因为您知道您没有找到任何东西。

这意味着根本不需要 foundBook 变量。

public Book searchClass(String inputClass) {
    for (Book book: bookStore) {
        if (book.getClassification() != null &&
            book.getClassification().equalsIgnoreCase(inputClass))
        {
            return book;
        }
    }

    throw new IllegalArgumentException("book not found");
}

另一种编写方法是使用 Java 8 流。您可以让流处理循环,而不是显式循环。

public Book searchClass(String inputClass) {
    return bookStore.stream()
        .filter(book -> book.getClassification() != null)
        .filter(book -> book.getClassification().equalsIgnoreCase(inputClass))
        .findAny()
        .orElseThrow(() -> new IllegalArgumentException("book not found"));
}

关于Java:如何在数组列表中搜索数组中对象的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623020/

相关文章:

python - 类似 '%term%' 搜索的算法

java - 如何在 java 中删除 SQL 结果中的空值?

java - 我的 2d 游戏引擎非常滞后

javascript - 在 Javascript 对象中使用 'this'

python - Numpy:使用掩码数组的条件求和行

MySQL实现基于多个过滤器的搜索

java - 当本地定义具有不同参数的函数时,无法调用静态导入的重载函数吗?

java - Java VM 何时支持 Linux ARM 的垃圾优先 (G1) 收集器?

java - 在JAVA中的特定位置写入JSON文件

algorithm - 是否有可能在这种单调的非线性趋势上实现比 logn 搜索更好的性能?