java:使用hashmap或其他一些java集合创建查找表?

Extending this question,我已经接受了一个答案,说明在这种情况下使用查找表或散列映射,因为它是处理多个条件的更好的构造.

当前构造.

Class to store messages.

    public class ProgressMessages 
    {
     public static String msg1="Welcome here .....";
     .
     .
     .
     //around 100 more similar static variables.
    }

Condition and Display the proper message from the above class.

    int x=calculatedVal1(m,n); 
    int y=calculatedVal2(o,q);

    SimpleDateFormat formater=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d=new Date();
    String s=formater.format(d);

    try {
          long d1 = formater.parse("2013-01-10 13:53:01").getTime();
          long d2=formater.parse(s).getTime();
          totaldays=Math.abs((d1-d2)/(1000*60*60*24));
         } catch (ParseException e) {
            e.printStackTrace();
         }

    if(totaldays<7&&x<20)
     {
      System.out.println("my message...1"+ProgressMessages.msg1); 
     }

    else if(totaldays<7&&x>10&&y<20)
    {
      System.out.println("my message...2"+ProgressMessages.msg2);
    }   
    ....
    //obvioulsy 100 more else-if's to display 100 messages.

I actually would like to know how would a look-up table help in this
case?

应该如何在java Hashmap / Hashtable等中实现,有什么好处呢?

– – 编辑 – –

我要去@assylias anwer申请更干净.但如果我使用Enums,那么我有一个修复.

描述大局……

即消息列表就像……

1)“欢迎”,nameOfUser“你的成功率是”succssRate“%”早些时候它早于“%”.

2)“哦是的..”succssRate“%”从之前的“%”改进.

3.)“现在你应该专注于”exerCiseName.

我怎么能使用Enumeration来做这件事,因为它有固定的String数据.我可以制作不同的构造函数吗?如何用assylas的编辑代码回答?

解决方法:

我会用一个

Map<Criteria, Message> lookupTable;

Criteria是您编写的类(并覆盖equals()和hashCode()),表示选择消息的条件.

Message也是您编写的类,它封装了实际的消息String,但也为您提供了一些设置变量的功能.

使用此解决方案,您必须在程序开头一次初始化地图,并且始终可以像这样使用它:

Criteria criteria = ... // gather your criteria somehow
Message msg = lookupTable.getMessage(criteria);
// use your variable setting methods here
String message = msg.toString();
上一篇:C#-EF6:将参考/查找数据与IQueryable一起使用


下一篇:JAVA程序设计:克隆图(LeetCode:133)