我有一个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会抛出一个错误,表示:
你真的应该看看任何匹配,因为你只对那些至少有一个作者你感兴趣的书感兴趣。
.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) 将一个新项添加到