我找不到答案所以我必须发布一个新问题 - 虽然它似乎与已经在这里提出的其他几个问题类似 - 但是要点:
我有一些列表,例如:
private static List<Book> books = new ArrayList<>();
它包含类Book
的对象,我有
private String title;
private String author;
和getters&amp; setters。
现在我有了一个新对象Book
(通过参数/ servlet从webform获取),我想检查新书的标题是否已列在列表books
上。
如果它已在该列表中,则打印一些控制台输出。如果不是,我想将整个新对象添加到列表中。为了做到这一点,我尝试使用常规的foreach循环来比较标题。有时候它有效,有时候没有(有时我的功能是以正确的方式比较两个标题,但有时不是 - 我不知道为什么)。我知道有一种更好的方法可以使用Java 8.但是,对于Java 8,我是新手。有人能告诉我一个很好的方法吗?
答案 0 :(得分:6)
我无法告诉您为什么要专门使用java-8功能,但可以这样做:
boolean isPresent = books.stream()
.anyMatch(book -> book.getTitle().equals(inputBook.getTitle()));
if(isPresent){
... console print
} else {
add it to books
}
我认为这可能会更加通用btw,有一个接受Predicate
的方法。
private boolean exists(List<T> list, Predicate<T> predicate) {
return list.stream().anyMatch(predicate);
}
这样你以后可以匹配任何你喜欢的东西:
boolean exists = exists(books, p -> p.getTitle().equals(b.getTitle()));
或者:
Predicate<Book> first = p -> p.getTitle().equals(b.getTitle());
Predicate<Book> second = first.and(p -> p.getTitle().equals(b.getTitle()));
boolean exists = exists(books, second);
答案 1 :(得分:3)
您可以尝试使用findAny
和Optional
Optional<Book> found = books.stream().filter(p -> p.getTitle().equalsIgnoreCase(newBook.getTitle())).findAny();
if (found.isPresent()){
System.out.println(found.get());
}
else {
books.add(newBook);
}
答案 2 :(得分:0)
如果你想要有点花哨和有条不紊,你可以创建一个&#39;图书馆&#39;继承或具有ArrayList的类。那么你需要的是一本书的equals函数,它在标题上使用String .equals()。然后,contains方法可以在元素上调用此循环。
答案 3 :(得分:0)
首先,您必须创建吸气剂&amp; setter for the class Book。这样的演示就是这样的:
class Book{
private String title;
private String author;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
现在,您可以执行以下操作来浏览每个对象的标题,并将其与新输入的对象标题进行比较。
Scanner in = new Scanner(System.in);
List<Book> books = new ArrayList<>();
Book b = new Book();
System.out.println("Enter the title:");
String t = in.nextLine();
b.setTitle(t); //optional
for (Book book:books
) {
if(book.getTitle().equals(t))
System.out.println("Title exists");
else
System.out.println("Title does not exist");
}