Faq By Population,最佳组织方式(Java)

时间:2016-05-13 08:49:50

标签: java

我有问题,我需要在不同人群中组织我的常见问题解答

Men ---> Young --> Working
               --> Not Working
    ---> Old
Woman --> Young --> Working
                --> Not Working
      --> Old

为此,我使用具有不同数组的FAQController

String Qmen[] = new String[12];

String Qwomen[] = new String[12];

String QmenOld[] = new String[12];

String QmenYoung[] = new String[12];

String QwomenOld[] = new String[12];

String QwomenYoung[] = new String[12];

String QmenYoungWorking[] = new String[12];

String QmenYoungNotWorking[] = new String[12];

....

之前的问题是问题 答案的相同数组例如:AmanYoung []

之后我填写了像这样的问题/答案

 Qmen[0] = "How to contact ?";
 Rmen[0] = "Call at number XXXXX";

所有这些人群之间存在非常不同的问题,最近出现了两个新人群,Man - >年轻 - >不工作 - >驱动器/ NotDriver

将所有这些问题与所有这些人群组织在一起很复杂

你有新方法吗?使用Api?

谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

首先,除非你有特殊的理由知道将会有12个问题并且完全没有12个问题我会使用List<>而不是阵列。

第二,您没有使用Java的任何面向对象的功能。 我至少会为了简单而将访问者的可见性留空(

class FaqEntry{
    String question;
    String answer;
    public FaqEntry(String question, String answer) {
        this.question = question;
        this.answer = answer;
    }
}
enum PopulationWithState {
    MenYoungWorking,
    MenYoungNotWorking;
}

然后将问题存储在以下内容中:

Map<PopulationWithState, List<FaqEntry>> faq = new HashMap<>();
//Fetch list of questions for a type. Return a new List if no questions exist
faq.computeIfAbsent(PopulationWithState.MenYoungNotWorking, k-> new LinkedList<>()).add(new FaqEntry("Question here", "Answer here"));
faq.computeIfAbsent(PopulationWithState.MenYoungNotWorking, k-> new LinkedList<>()).add(new FaqEntry("Question 2 here", "Answer 2 here"));

//Fetch a particular list
List<FaqEntry> menYoungNotWorking = faq.computeIfAbsent(PopulationWithState.MenYoungNotWorking, k-> new LinkedList<>());