java - 使用Java中的多个条件搜索书籍

原文 标签 java

我有这种方法需要n个参数,并使用几个参数在arrayList中搜索一本书。 。
如何缩小尺寸?
如何按类别或作者对书籍进行排序?
先感谢您。

这是我的方法
//使用多个条件搜索一本书

static void bookSearch(String... varg) { // take varg as parameter
    String title = ""; // place holders
    String author = "";

    if (varg.length > 1) { // check varg length
        title = varg[0]; // if it is greater than 1 initialize needed arguments
        author = varg[1];
    } else {
        title = varg[0]; // else initialize the first argument
    }
    for (Book book : bookList) {

        /*
         * if the title is the same and there is a second argument that
         * match author's name print found it
         */
        if (book.getTitle().equals(title)) {
            if (author.isEmpty() ^ (book.getAuthor().getfName() == author)) {
                System.out.println(" \"" + 
                                   title + 
                                   "\" founded at: " + 
                                   bookList.indexOf(book));
                break;
            }// end of if

        } else if (bookList.indexOf(book) == bookList.size() - 1) {// if not found
            System.out.println("cant find \"" + title);
        }// end of else

    } // end of for loop

} //end of search method

最佳答案

Java8中,您可以使用lambda和函数来获得灵活的filter预订功能。

例如。您有以下Book类:

class Book {
    private String author;
    private String title;
}


book filter函数如下所示:

BiFunction<List<Book>, Predicate<Book>, List<Book>> BOOK_FILTER =
        (books, fields) -> books.stream().filter(fields).collect(Collectors.toList());


然后,您只需要构建必需的Predicate并使用此功能。

public static List<Book> findBookByPredicate(List<Book> books, String author, String title) {
    Predicate<Book> byAuthor = book -> book.getAuthor().equals(author);
    Predicate<Book> byTitle = book -> book.getTitle().equals(title);
    return BOOK_FILTER.apply(books, byAuthor.and(byTitle));
}


如您所见,不仅限于一定数量的Book字段。您可以随意组合它; BOOK_FILTER功能保持不变。

关于java - 使用Java中的多个条件搜索书籍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49462114/

相关文章:

java - 尝试在 RecyclerView 中添加新元素时,某些项目重复

java - 这是在 Java 中重复方法调用的最干净的方法吗?

Java EE session : Can you store some attributes as non-persistent?

java - 使用 antlr4 的歧义语法

java - 在DynamoDB中以Epoch格式自动填充时间

java - 安卓横版设计

java - 将jar作为Web服务运行?

java - 如何阻止 JApplet 中的移动图像闪烁

java - Tomcat 上的 JSF - 为什么可能?

java - 在 Eclipse 中重命名和重构类,并保留 SVN 历史记录