我如何以更好的方式做到这一点?我更喜欢 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 和流很适合解决这个问题。
添加回答
举报
0/150
提交
取消