我找不到答案,所以我必须发布一个新问题 - 尽管它似乎与此处已经提出的其他问题类似 - 但重点是:
我有一些列表,例如:
private static List<Book> books = new ArrayList<>();
它包含类 Book
的对象,我已经在其中
private String title;
private String author;
以及 getter 和 setter。
现在我有了一个新对象Book
(通过parameters/servlet从webform获取),我想检查新书的标题是否已经在列表books
中。
如果它已经在该列表中,则打印一些控制台输出。如果不是,我想将整个新对象添加到列表中。为了做到这一点,我尝试使用常规的 foreach 循环来比较标题。有时成功,有时失败(有时我的功能以正确的方式比较两个标题,但有时失败 - 我不知道为什么)。我知道使用 Java 8 有更好的方法来做到这一点。但我是 Java 8 的新手。有人可以告诉我一个好的方法吗?
最佳答案
我不知道为什么你想专门使用 java-8 功能来做到这一点,但可以这样做:
boolean isPresent = books.stream()
.anyMatch(book -> book.getTitle().equals(inputBook.getTitle()));
if(isPresent){
... console print
} else {
add it to books
}
我认为这可以做得更通用一点,有一个可以接受谓词
的方法。
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);
关于java - 在对象数组中搜索特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45542659/