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

2023-12-11

延伸这个问题,我已经接受了一个答案,上面写着使用查找表或哈希图对于这种情况,因为这会更好构建处理多种条件.

当前构造。

存储消息的类。

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

条件并显示来自上述类的正确消息。

    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.

我实际上想知道查找表在这方面有何帮助 案件?

在java Hashmap/Hashtable等中应该如何实现,如何实现会有什么优势?

- - 编辑 - -

我将使用@assylias anwer,因为它应用起来更干净。但如果我使用枚举那么我就得到了修复。

为了描述大局...

即消息列表就像......

1)“欢迎,”+用户名+“您的成功率为”+ succssRate +“%”+早些时候+早些时候+“%”。

2)“哦,是的..”+成功率+“%”+从+之前+“%”改进。

3.)“现在您应该关注”+exerciseName。

我如何使用枚举来做到这一点,因为它具有固定的字符串数据。我可以制作不同的构造函数吗?任何带有编辑代码的示例如何回答?


您可以使用枚举,假设消息列表在编译时已知。优点是现在每条消息都负责保存其条件,并且调用代码会简单得多。

public enum Message {

    MESSAGE1("Welcome") {
        @Override
        boolean isApplicable(long totalDays, int x, int y) {
            return totalDays < 7 && x < 20;
        }
    },
    MESSAGE2("Bye bye") {
        @Override
        boolean isApplicable(long totalDays, int x, int y) {
            return totalDays < 7 && x > 10 && y < 20;
        }
    };

    private String msg;

    Message(String msg) {
        this.msg = msg;
    }

    abstract boolean isApplicable(long totalDays, int x, int y);

    public static String lookupMessage(long totalDays, int x, int y) {
        for (Message m : Message.values()) {
            if (m.isApplicable(totalDays, x, y)) {
                return m.msg;
            }
        }
        throw new IllegalArgumentException();
    }
}

现在在你的调用代码中,不再有 if / else if,只有一行代码:

System.out.println(Message.lookupMessage(1, 2, 3));

注 1:这不如使用 Map 高效,因为查找是 O(n) 操作,但由于 n 约为 100 左右,因此不会造成显着的性能损失。而且它比其他答案中提出的解决方案更具可读性和可维护性。

注 2:您甚至可以将条件/消息放入平面文件中,在运行时读取该文件并使用脚本引擎在运行时评估每个条件。它会稍微慢一些(但我们在这里讨论的是亚毫秒),但会消除代码中的所有混乱并将其放入配置文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java:使用 hashmap 或其他一些 java 集合创建查找表? 的相关文章

随机推荐

  • 如何读取带有空格的 cin 直到换行符?

    我希望从 C 中的 cin 读取当前位置直到换行符到字符串中 要读取的字符可能包含空格 我的第一遍失败 因为它停在第一个空格上 string result cin gt gt result 如果给出 cin cd my dir doSome
  • R:当情况并非如此时,LIME 在不同的特征编号上返回错误

    我正在构建克林顿和特朗普推文的文本分类器 数据可以在Kaggle 我正在使用 EDA 和建模quanteda包裹 library dplyr library stringr library quanteda library lime dat
  • 如何以编程方式获取 python.exe 位置? [复制]

    这个问题在这里已经有答案了 基本上我想获得 python 解释器的句柄 这样我就可以传递一个脚本文件来执行 从外部应用程序 这适用于 Linux 和 Windows Python 3 x gt gt gt import sys gt gt
  • 替换数组中的对象

    我有这个 JavaScript 对象 var arr1 id 124 name qqq id 589 name www id 45 name eee id 567 name rrr var arr2 id 124 name ttt id 4
  • React,从 json 加载本地图像

    是的 这个问题可能与其他问题重复 但我找不到这个问题的解决方案 我创造一些简单的东西 1 个读取 json 并加载图像的组件 The json images id 1 url assets images slider croissant o
  • 创建 SVG 进度圈

    有人知道如何在 svg 中创建一个圆形 进度条 吗 我需要指定圆圈的百分比 例如颜色在蛋糕形状中增长的百分比 只要我有一个属性可以改变其当前状态 增长就可以是静态的 以下是我曾经使用的想法 稍加修改css and animation标签我们
  • 如何在 Brightway 中保存新的 LCIA 方法

    我有以下格式的特征因素列表 biosphere3 key characterization factor 这是一个快速摘录 my cfs biosphere3 e259263c d1f1 449f bb9b 73c6d0a32a00 1 0
  • UserControl 与 Windows 之间的交互

    我创建了一个包含一些控件 按钮和复选框 的用户控件 之后 我在 WPF Windows 中添加了对该 UserControl 的引用 我想要做的是 当我单击 UserControl 中的按钮时 该按钮会触发一个操作并更改 Windows 中
  • 检查 Selenium 是否完成基于 Web 元素的滚动的条件?

    目前我有一个脚本将转到到到网并尝试抓取该特定过滤器中的每个图像 我想知道我应该将 if 语句设置为什么条件 以便它能够跳出 while 循环 然后解析 url 列表 为我提供每个图像的清晰 url 链接 我只是很困惑 一旦到达最后一个网络元
  • 初始化 NSMutableArray 时使用短语法是否正确?

    通常当我们要初始化的时候NSMutableArray we use NSMutableArray mArr NSMutableArray alloc initWithObjects one two three nil 但是 使用如下语法是否
  • 为什么 x,y = zip(*zip(a,b)) 在 Python 中有效?

    好的 我喜欢 Pythonzip 功能 一直用它 太棒了 我时不时地想做相反的事情zip 想 我以前知道怎么做 然后google python unzip 然后记住有人使用这个神奇的 解压缩元组的压缩列表 像这样 x 1 2 3 y 4 5
  • 如何删除 HTML 表单中提交按钮的默认焦点?

    我的页面上有一个 HTML 表单 当我在表单中的一个文本字段中输入一些值并按 Enter 键 时 表单将立即提交 我认为发生这种情况是因为默认焦点位于提交按钮上 但我尝试使用模糊 函数来删除焦点 但它不起作用 我正在使用 Chrome 有什
  • Django 测试 - 使用 create_batch 的用户工厂

    好吧 我的测试文件遇到了有趣的问题 我正在使用这个简单的代码来检查用户创建的UserFactory UserFactory create batch 4 for u in User objects all print u email Use
  • 对象属性为相同长度表示以加快读取速度

    我想将 人 对象的属性转换为一种表示形式 我可以在其中将行写入代表每个人的文件中 许多机器需要同时读取分配的文件块 因此我从字符编码文本行移至字节列表 我希望通过每个人的代表相同长度我不必阅读每个字符 阅读应用程序可以 跳转 到需要开始阅读
  • 如何在Cocoa中实现两指滑动手势来后退和前进?

    Safari 和 Finder 等多种应用程序会在您用两根手指滑动在妙控鼠标上 或用三个手指在妙控板上 我将如何在我的 Cocoa 应用程序中实现这一点 有哪些课程可供选择 三指滑动是最简单的 因为 NSResponder 已经为您完成了这
  • 与 firebase 11.8.0 和 google-services 插件 3.1.2 冲突

    我与 firebase 11 8 0 和 google services 插件 3 1 2 存在明显冲突 构建失败 建议我使用 firebase 11 4 2 版本 我的 gradle 构建文件的相关摘录 Root build gradle
  • 如何持久化动态控件 (c#)

    根据标题 我创建了一个自定义控件 在某个按钮单击事件中 该控件被实例化 然后添加到页面 它是一个动态控件 具有自己的按钮事件 为了触发这些按钮事件 必须在结束时绘制控件Page Load OnLoad 在后续的page load onloa
  • 为什么无法使用此 HTML/PHP 上传文件?

  • 如何使 x 轴标签显示在带注释的热图plotly python 的底部而不是顶部?

    我用plotly python 创建了一个带注释的热图 问题是 x 轴的默认位置位于图表的顶部而不是底部 我一直在搜索参考页面 但无法弄清楚如何配置它 常规热图的默认值位于底部 但带注释的热图版本默认值位于顶部 情节的figurefacto
  • java:使用 hashmap 或其他一些 java 集合创建查找表?

    延伸这个问题 我已经接受了一个答案 上面写着使用查找表或哈希图对于这种情况 因为这会更好构建处理多种条件 当前构造 存储消息的类 public class ProgressMessages public static String msg1