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 集合创建查找表? 的相关文章

  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • 如何读取带有空格的 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