java - 如何使用 Java 8 改进条件逻辑
问题描述
我正在学习 Java 8,我想知道是否有一种干净的方法可以在 Java 8 中更有效地重写以下代码:
public static Map<String, Character> parseOrg(String org) {
Map<String, Character> map = new HashMap<String, Character>();
if (org != null && !org.isEmpty()) {
String modifiedString = trimOrg(org); //private method to substring
if (modifiedString.length() == 4) {
populateMap(modifiedString.charAt(modifiedString.length()-1), modifiedString.charAt(modifiedString.length()-2), modifiedString.charAt(modifiedString.length()-3), modifiedString.charAt(modifiedString.length()-4));
} else if (modifiedString.length == 3) {
populateMap(modifiedString.charAt(modifiedString.length()-1), modifiedString.charAt(modifiedString.length()-2), modifiedString.charAt(modifiedString.length()-3), null);
} else if (modifiedString.length == 2) {
populateMap(modifiedString.charAt(modifiedString.length()-1), modifiedString.charAt(modifiedString.length()-2), null, null);
} else if (modifiedString.length == 1) {
populateMap(modifiedString.charAt(modifiedString.length()-1), null, null, null);
}
} else {
LOG.error("Null org provided");
}
return map;
}
private static void populateMap(Map<String, Character> map, Character pos0, Character pos1, Character pos2, Character pos3) {
map.put("Position 3", pos3);
map.put("Position 2", pos2);
map.put("Position 1", pos1);
map.put("Position 0", pos0);
}
解决方案
你可以这样做:
Runnable r = Arrays.asList(() -> {}, YourClass::doD, YourClass::doC, YourClass::doB, YourClass::doA, () -> {})
.get(Math.min(Math.max(0, org.length()), 4));
r.run();
但老实说,这不值得。只需使用开关即可。
推荐阅读
- google-sheets - 谷歌表格,单元格引用
- sas - 执行组动作而不减少到一行
- amazon-web-services - AWS Amplify 与 AWS Lambda 中的“应用程序”功能有什么区别?
- linux - 从 Windows 服务器自动部署到 Linux/Raspbian
- c++ - 访问在另一个 else 语句中声明的向量
- python - python - 数据框 - groupby - 在有差异的情况下处理非分组列
- excel - 使用基于选定单元格的单元格中的值更改选定单元格的颜色
- php - Wordpress 前端文件上传
- java - Java:我不了解相对路径
- sqlite - sqlite3 - 过滤掉具有相同标识符的第一条和最后一条记录