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

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