当前位置: 首页 > 知识库问答 >
问题:

如何使用Java Stream API在抽象数据类型中的列表作为其他抽象数据类型的属性进行搜索

漆雕嘉茂
2023-03-14

我有一个Library类,它使用Set copies作为字段。此BookCopy具有属性bookbook和条件c。Book类有String title、int year和List Authors。我正在实现一个方法(使用流)来使用字符串搜索标题或作者:

public List<Book> find(String query) {

    Set<BookCopy> allCopies = this.copies;
    //Set<BookCopy> becomes Set<Book> with only matching title books 
    Set<Book> booksByTitle = allCopies
            .stream()
            .map(BookCopy::getBook)
            .filter(b -> b.getTitle().contains(query))
            .collect(Collectors.toSet());
    //Set<BookCopy> becomes Set<Book> with only matching authors books
    Set<Book> booksByAuthor = allCopies
            .stream()
            .map(BookCopy::getBook)
            .filter(b -> {
                for (String s:b.getAuthors()){
                    s.contains(query);
                }})
            .collect(Collectors.toSet());

    booksByTitle.addAll(booksByAuthor);

    return new ArrayList<>(booksByTitle);
    }

BooksByTitle似乎很好,但是对于BooksByAuthor,IDE会抛出一个错误,表示:

共有1个答案

薛经艺
2023-03-14

你真的应该看看任何匹配,因为你只对那些至少有一个作者你感兴趣的书感兴趣。

  .stream()
  .map(BookCopy::getBook)
  .filter(b -> b.authors.stream().anyMatch(a -> a.contains(query)))
  .collect(Collectors.toSet()));
 类似资料:
  • 队列抽象数据类型由以下结构和操作定义。如上所述,队列被构造为在队尾添加项的有序集合,并且从队首移除。队列保持 FIFO 排序属性。 队列操作如下。 Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。 enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。 dequeue() 从队首移除项。它不需要参数并返回 item。 队列被修改。 is

  • 如上所述,无序列表的结构是项的集合,其中每个项保持相对于其他项的相对位置。下面给出了一些可能的无序列表操作。 List() 创建一个新的空列表。它不需要参数,并返回一个空列表。 add(item) 向列表中添加一个新项。它需要 item 作为参数,并不返回任何内容。假定该 item 不在列表中。 remove(item) 从列表中删除该项。它需要 item 作为参数并修改列表。假设项存在于列表中。

  • 所以我有了这个类,我想要一个接受int的方法,并创建一个这个大小的新数组。如果我声明 这将创建一个大小为10的数组。 我试过做

  • 栈的抽象数据类型由以下结构和操作定义。如上所述,栈被构造为项的有序集合,其中项被添加和从末端移除的位置称为“顶部”。栈是有序的 LIFO 。栈操作如下。 Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。 push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。 pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。 peek()

  • 图抽象数据类型(ADT)定义如下: Graph() 创建一个新的空图。 addVertex(vert) 向图中添加一个顶点实例。 addEdge(fromVert, toVert) 向连接两个顶点的图添加一个新的有向边。 addEdge(fromVert, toVert, weight) 向连接两个顶点的图添加一个新的加权的有向边。 getVertex(vertKey) 在图中找到名为 vertK

  • deque 抽象数据类型由以下结构和操作定义。如上所述,deque 被构造为项的有序集合,其中项从首部或尾部的任一端添加和移除。下面给出了 deque 操作。 Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。 addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。 addRear(item) 将一个新项添加到