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.
85 lines
2.9 KiB
85 lines
2.9 KiB
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* 分析命令类
|
|
* 复用策略解析但不存储,只输出统计信息
|
|
*/
|
|
public class AnalyzeCommand {
|
|
private final List<Article> articles;
|
|
private final List<ArticleAnalyzer> analyzers;
|
|
|
|
/**
|
|
* 构造函数,接收文章列表和分析器列表
|
|
* @param articles 要分析的文章列表
|
|
* @param analyzers 分析器列表
|
|
*/
|
|
public AnalyzeCommand(List<Article> articles, List<ArticleAnalyzer> analyzers) {
|
|
Objects.requireNonNull(articles, "文章列表不能为null");
|
|
Objects.requireNonNull(analyzers, "分析器列表不能为null");
|
|
|
|
this.articles = new ArrayList<>(articles);
|
|
this.analyzers = new ArrayList<>(analyzers);
|
|
}
|
|
|
|
/**
|
|
* 执行分析并输出结果(不存储)
|
|
*/
|
|
public void execute() {
|
|
System.out.println("================================================");
|
|
System.out.println(" 文章分析报告");
|
|
System.out.println("================================================");
|
|
System.out.println("分析文章数量: " + articles.size());
|
|
System.out.println("分析器数量: " + analyzers.size());
|
|
System.out.println("------------------------------------------------");
|
|
|
|
for (ArticleAnalyzer analyzer : analyzers) {
|
|
System.out.println("\n【" + analyzer.getName() + "】");
|
|
Map<String, Object> result = analyzer.analyze(articles);
|
|
|
|
// 输出分析结果(不存储)
|
|
for (Map.Entry<String, Object> entry : result.entrySet()) {
|
|
if (!"analyzer".equals(entry.getKey())) {
|
|
System.out.println(" " + formatKey(entry.getKey()) + ": " + formatValue(entry.getValue()));
|
|
}
|
|
}
|
|
}
|
|
|
|
System.out.println("\n================================================");
|
|
System.out.println(" 分析报告结束");
|
|
System.out.println("================================================");
|
|
}
|
|
|
|
/**
|
|
* 格式化键名
|
|
*/
|
|
private String formatKey(String key) {
|
|
switch (key) {
|
|
case "totalCount": return "文章总数";
|
|
case "averageLength": return "平均标题长度";
|
|
case "maxLength": return "最长标题长度";
|
|
case "minLength": return "最短标题长度";
|
|
default: return key;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 格式化值
|
|
*/
|
|
private String formatValue(Object value) {
|
|
if (value instanceof Double) {
|
|
return String.format("%.2f", value);
|
|
}
|
|
return value.toString();
|
|
}
|
|
|
|
/**
|
|
* 添加分析器
|
|
*/
|
|
public void addAnalyzer(ArticleAnalyzer analyzer) {
|
|
Objects.requireNonNull(analyzer, "分析器不能为null");
|
|
analyzers.add(analyzer);
|
|
}
|
|
}
|