为了账号安全,请及时绑定邮箱和手机立即绑定

java中具有多个OR的if条件的更好方法是什么?Java8 是首选

java中具有多个OR的if条件的更好方法是什么?Java8 是首选

慕尼黑5688855 2021-09-03 22:02:46
我如何以更好的方式做到这一点?我更喜欢 java8 语法。这些布尔条件可能会增长。boolean imageType = filetype.startsWith("image");boolean videoType = filetype.startsWith("video");boolean archiveType = filetype.contains("archive");boolean jarType = filetype.contains("java-archive");boolean audioType = filetype.startsWith("audio");boolean zipType = filetype.contains("zip");boolean xTarType = filetype.contains("x-tar");boolean rarType = filetype.contains("rar");if(!(imageType || videoType || archiveType || jarType || audioType || zipType || xTarType)) {         //doSomething         }
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

这里有几种方法可以使这个更“可扩展”。


使用正则表达式:


Pattern p = Pattern.compile("^video|^audio|^image|zip|rar|java-archive|x-tar");

if (!p.matcher(filetype).find()) {

    // do stuff

}

使用数组或列表。例如:


String[] prefixes = new String[]{"video", "audio", "images"};

String[] contains = new String[]{"zip", "rar", "x-tar", "jar-archive"};

boolean match = false;

for (String p : prefixes) {

    if (filetype.startsWith(p)) {

        match = true;

    }

}

...

if (!match) {

    // do stuff

}

显然,正则表达式方法更简洁,但数组方法可能更有效(如果这很重要!)。这取决于正则表达式引擎如何处理具有许多替代方案的正则表达式。


这两种方法都会扩展;例如通过更新正则表达式,或通过向数组添加字符串。


在这两种情况下,您都可以轻松地从属性文件或类似文件中加载相关条件……并避免更改代码。


我不相信 Java 8 lambdas 和流很适合解决这个问题。


查看完整回答
反对 回复 2021-09-03
  • 2 回答
  • 0 关注
  • 366 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信