在java中,除了遵循if-else梯子之外,还有什么更好的选择呢?

2023-12-22

情况 :我正在检查文件名,文件名存储在String变量称为str并根据入住条件if语句我正在设置一个名为的变量的值mailType .

if(str.contains("template"))
        {                   
          if(str.contains("unsupported"))
              mailType="unsupported";      
              else
                  if(str.contains("final_result"))                
                      mailType="final_result";            
                  else
                      if(str.contains("process_success"))
                          mailType="Process Success"; 
                      else
                          if(str.contains("receive"))                         
                              mailType="Receive";                         
                          else
                          if(str.contains("sen"))
                              mailType="sent"; 
                          else
                              if(str.contains("welcome"))
                                  mailType="welcome";
                              else
                                  if(str.contains("manual"))
                                     mailType="Manual";                    
        }       
        else                
if(str.contains("properties"))
        {

          if(str.contains("unsupported"))
              mailType="unsupported";      
              else
                  if(str.contains("final_result"))                
                      mailType="final_result";            
                  else
                      if(str.contains("process_success"))
                          mailType="Process Success"; 
                      else
                          if(str.contains("receive"))                         
                              mailType="Receive";                         
                          else
                          if(str.contains("sen"))
                              mailType="sent"; 
                          else
                              if(str.contains("welcome"))
                                  mailType="welcome";
                              else
                                  if(str.contains("manual"))
                                     mailType="Manual";

        }

问题 :有没有更好的方法可以在 java 中做到这一点,从而缩短我的代码并且内存友好?


Use a LinkedHashMap<String, String>:

LinkedHashMap<String, String> mapping = new LinkedHashMap<>();
mapping.put("unsupported", "unsupported");
mapping.put("final_result", "final_result");
// ... etc

然后迭代映射直到找到匹配的键:

for (Map.Entry<String, String> entry : mapping.entrySet()) {
  if (str.contains(entry.getKey()) {
    mailType = entry.getValue();
    break;
  }
}

这里的关键点是LinkedHashMap保留插入顺序(与HashMap)所以你实际上可以指定你想要测试匹配的顺序(其他地图实现也这样做,例如 Guava 的ImmutableMap; LinkedHashMap只是开箱即用的一个)。

如果您需要将其嵌套在外壳中,则可以简单地应用相同的模式:

LinkedHashMap<String, LinkedHashMap<String, String>> outerMapping =
    new LinkedHashMap<>();
outerMapping.put("template", mapping);
outerMapping.put("properties", someOtherMapping);

然后以相同的方式迭代键:

for (Map.Entry<String, LinkedHashMap<String, String>> outerEntry : outerMapping.entrySet()) {
  if (str.contains(outerEntry.getKey()) {
    // Apply the iteration above, using outerEntry.getValue().
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在java中,除了遵循if-else梯子之外,还有什么更好的选择呢? 的相关文章

随机推荐

  • 你将如何在 C# 中构建这个 xml

    我需要生成这个看起来简单的 XML 寻找一种干净的方法来生成它
  • 从 NPM 包中导出多个模块

    我有一个相当大的项目 A 使用 Node 和 Typescript 在项目 A 中 我有很多不同的模块 我想在另一个项目 B 中重用它们 因此我用这个 tsconfig json 构建了项目 A compilerOptions target
  • Android 应用内计费 - 从服务器检索信息时出错

    我在应用程序计费中使用 Android 来进行应用程序内购买 在极少数情况下 我的许多用户都会报告此错误 从服务器检索信息时出错 RPC S 7 AEC 0 这是在生产中发生的 而不是在测试中发生的 我无法在本地重现此内容以进行调试 这个错
  • ArrayDeque类的addFirst方法

    java util ArrayDeque类中addFirst方法的代码是 public void addFirst E e if e null throw new NullPointerException elements head hea
  • 使用 1-1 函数从 id 生成代码

    有没有好的可逆 1 1 函数将一个整数映射到另一个整数 例如 给定范围 0 5 我想找到一个映射的 0 gt 3 1 gt 2 2 gt 4 3 gt 5 4 gt 1 5 gt 0 此外 映射应该看起来是随机的 您可以按升序填充数组并对其
  • 使用 Laravel 查询生成器和 LEFT JOIN 删除行

    如何在一个查询中从多个表中删除行 使用左连接 查询 DELETE deadline job FROM deadline LEFT JOIN job 所以 我尝试这样 DB table deadline job gt leftJoin job
  • 下载文件时显示“请稍候”消息或进度条

    我使用以下 WordPress 管理员通知来提示用户下载一些文件 我想在下载文件时包含一个进度条或至少包含一个 正在下载 请稍候 消息 有任何想法吗 我已经尝试了几种 jQuery 解决方案 但没有任何效果 对于 jQuery 我完全是个菜
  • 非静态字段、方法或属性需要对象引用吗?

    我知道这可能是一个非常新的问题 所以我很抱歉 我正在尝试从另一个表单 MaxScore 访问 Form1 上标签的 Text 属性 当我单击 MaxScore 上的 确定 按钮时 我想使用 max ToString 将 Form1 的 my
  • 如何直接从我的服务器将视频上传到 Youtube?

    我正在设置一个 无头 网络服务器 让人们可以制作自己的自定义延时电影 有几个人想将他们制作的延时视频上传到 YouTube 与其将视频下载到该人的笔记本电脑上 然后该人手动将其上传到 YouTube 有没有一种方法可以在我的网络服务器上编写
  • 配方/成分/测量/数量的数据库架构

    我正在创建一个食谱应用程序来帮助我妻子实现她的蛋糕爱好 这个想法是创建一个食谱数据库来保存她所有的蛋糕食谱 每个食谱都有多种成分 每种成分都有一个测量值 克 毫升 茶匙等 然后是数量 我了解如何创建 食谱 和 成分 表 以及如何将这两个表与
  • 按降序对 int 数组进行排序[重复]

    这个问题在这里已经有答案了 可能的重复 按降序对基本类型数组进行排序 https stackoverflow com questions 215271 sort arrays of primitive types in descending
  • 使用 Hangout api 进行视频通话 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 你好 我有一个 Android 应用程序 我想要其中的视频聊天功能 我在互联网上搜索了很多 但找不到任何有效且简单的解决方案 然后我找
  • 如何通过切换(“慢”)使其更平滑

    我有以下代码可以工作 但在每个切换操作结束时它变得有点跳动 如果我切换段落会更流畅吗 我正在尝试获取该段落 但我不知道该怎么做 div div class toppara p Conte p div div
  • 从 Express 中间件中排除路由

    我有一个节点应用程序 就像防火墙 调度程序一样位于其他微服务前面 它使用如下所示的中间件链 app use app lookup app use timestamp validator app use request body app us
  • 如何在验证消息 Laravel 5.2 中获取数组索引

    我放入的这些数组Laravel Validator作为参数 item gt string rules item string gt Item number index is not string messages 我希望有index num
  • 如何使用 Spring Boot 注册 servlet?

    这段代码不起作用 我有一个 web xml 需要翻译成 spring boot
  • 300GB Postgis 表索引速度慢

    我正在将大约 300GB 的等高线数据加载到 postgis 表中 为了加快这个过程 我读到首先加载数据 然后创建索引是最快的 加载数据只花了大约2天的时间 但现在我已经等待索引大约30天了 它仍然没有准备好 查询是 create inde
  • 如何使用 React Native Agora 显示传入视频通话

    我想在我的 React Native 应用程序中添加实时通话功能 我正在使用agora和socket io来使其实时 并且当应用程序位于前台时它工作正常 但是当应用程序关闭时我被卡住了 因为应用程序关闭时套接字不起作用我想像来电屏幕一样显示
  • 您可以将图像分配给 border-right 吗?

    我正在 html 和 css 中制作一个导航菜单 但我希望每个导航项的右侧边框是一个图像 I tried border right url image jpg 但这没有用 我该怎么做 您可以使用背景图像 然后将背景图像放置在每个元素的右侧
  • 在java中,除了遵循if-else梯子之外,还有什么更好的选择呢?

    情况 我正在检查文件名 文件名存储在String变量称为str并根据入住条件if语句我正在设置一个名为的变量的值mailType if str contains template if str contains unsupported ma