3 回答
TA贡献1868条经验 获得超4个赞
下面的代码返回一个列表,基于您的search (filter):
List< Book> result = bk.stream().filter(book -> "booknamehere".equals(book.getBook_nm()))
.filter(book -> "authernamehere".equals(book.getAuther_nm()))
.collect(Collectors.toList());
TA贡献1775条经验 获得超8个赞
首先有一种新方法(使用 java 8+)和旧方法来做到这一点。新方法将是这样的:
String authorName = s.next();
String bookName = s.next();
List<String> result = bk.stream() // open stream
.filter(book-> book.getBook_nm().equals(bookName) && book.getAuthor_nm().equals(authorName ) )
.collect(Collectors.toList());
另一种(老式)方法是使用 for 循环:
ArrayList<book> result = new ArrayList<book>();
for(Book book : bk) //By the way always use Big first letter for name of your Class! (Not book but Book)
{
if(book.getBook_nm().equals(bookName) && book.getAuthor_nm().equals(authorName))
{
result.add(book);
}
}
在这之后,您可以在这两种情况下打印包含该书的结果列表。但是,如果您要搜索很多此作者和书名,并且您有很多元素,则可以考虑检查性能。因为每次搜索都会遍历列表。也许使用 Map 有更好的解决方案......
一些额外的信息。如果您知道是否总是只能从条件中找到一个元素,则它是重要的。例如,在您的情况下,您可以唯一找到一本书,其中名称 X 和作者 Y。不能有另一本书具有相同的名称和作者。在这种情况下,您可以这样做:
新方法(Java 8 之后):
Book res = bk.stream()
.filter(book -> book.getBook_nm().equals(bookName) && book.getAuthor_nm().equals(authorName))
.findFirst()
.get();
旧方法:
Book result = null;
for(Book book : bk)
{
if(book.getBook_nm().equals(bookName) && book.getAuthor_nm().equals(authorName))
{
result = book;
break;
}
}
这样搜索一个元素时速度会更快
添加回答
举报