You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从不可变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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:45:33