use*_*376 2 java arraylist java-8 java-stream
我找不到答案所以我必须发布一个新问题 - 虽然它似乎与已经在这里提出的其他几个问题相似 - 但重点是:
我有一些列表,例如:
private static List<Book> books = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
它包含了Book我所拥有的类的对象
private String title;
private String author;
Run Code Online (Sandbox Code Playgroud)
和吸气者和制定者.
现在我有了一个新对象Book(通过参数/ 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
}
Run Code Online (Sandbox Code Playgroud)
我认为这可能会更加通用btw,有一个方法可以接受一个Predicate.
private boolean exists(List<T> list, Predicate<T> predicate) {
return list.stream().anyMatch(predicate);
}
Run Code Online (Sandbox Code Playgroud)
这样你以后可以匹配任何你喜欢的东西:
boolean exists = exists(books, p -> p.getTitle().equals(b.getTitle()));
Run Code Online (Sandbox Code Playgroud)
要么 :
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |