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

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);
}
}