You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.7 KiB
73 lines
1.7 KiB
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
|
|
public class ArticleRepository {
|
|
private final List<Article> articles;
|
|
|
|
public ArticleRepository() {
|
|
this.articles = new ArrayList<>();
|
|
}
|
|
|
|
/**
|
|
* 添加单个文章,防御 null
|
|
*/
|
|
public void add(Article article) {
|
|
Objects.requireNonNull(article, "文章不能为null");
|
|
articles.add(article);
|
|
}
|
|
|
|
/**
|
|
* 添加多个文章,防御 null 和空集合
|
|
*/
|
|
public void addAll(Collection<Article> articlesToAdd) {
|
|
Objects.requireNonNull(articlesToAdd, "文章集合不能为null");
|
|
|
|
for (Article article : articlesToAdd) {
|
|
Objects.requireNonNull(article, "集合中包含null文章");
|
|
articles.add(article);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取所有文章的不可变视图
|
|
*/
|
|
public List<Article> getAll() {
|
|
return Collections.unmodifiableList(articles);
|
|
}
|
|
|
|
/**
|
|
* 根据标题查找文章
|
|
*/
|
|
public Article findByTitle(String title) {
|
|
Objects.requireNonNull(title, "标题不能为null");
|
|
return articles.stream()
|
|
.filter(a -> title.equals(a.getTitle()))
|
|
.findFirst()
|
|
.orElse(null);
|
|
}
|
|
|
|
/**
|
|
* 获取文章数量
|
|
*/
|
|
public int count() {
|
|
return articles.size();
|
|
}
|
|
|
|
/**
|
|
* 清空所有文章
|
|
*/
|
|
public void clear() {
|
|
articles.clear();
|
|
}
|
|
|
|
/**
|
|
* 检查是否包含指定文章
|
|
*/
|
|
public boolean contains(Article article) {
|
|
Objects.requireNonNull(article, "文章不能为null");
|
|
return articles.contains(article);
|
|
}
|
|
}
|