如何从不可变HashMap中取指定字符串并覆写Chatty接口方法?
实现ChatBot类的方法方案
1. 实现answer(String question)方法
核心是利用接口中定义的QA映射表,通过传入的问题作为键获取对应回答,同时处理未匹配问题的场景:
@Override public String answer(String question) { // 从QA映射表取对应回答,无匹配时返回默认回复 return Chatty.QA.getOrDefault(question, "Sorry, I don't understand that question."); }
2. 实现question()方法
需要从QA的问题集合中随机返回一个问题,步骤是先将不可变的键集合转为可随机访问的列表,再通过随机数选取:
import java.util.List; import java.util.Random; import java.util.stream.Collectors; public class ChatBot implements Chatty { private final Random random = new Random(); // 提前将QA的问题集合转为List,避免重复转换 private final List<String> questions = Chatty.QA.keySet().stream() .collect(Collectors.toList()); @Override public String question() { // 生成随机索引,返回对应问题 int randomIndex = random.nextInt(questions.size()); return questions.get(randomIndex); } @Override public String answer(String question) { return Chatty.QA.getOrDefault(question, "Sorry, I don't understand that question."); } }
关键说明
- 接口中的
QA是静态成员,可直接通过Chatty.QA访问,无需实例化接口。 Map.of()创建的是不可变Map,转为List后更方便随机访问操作,且在类初始化时仅转换一次,提升效率。getOrDefault()方法能避免未匹配问题时返回null,保证回复的合理性。
内容的提问来源于stack exchange,提问作者Zorro
相关产品推荐
相关产品推荐

