簡單的邏輯完全可以用if else解決掉;
現在有這樣的一個邏輯
|
username |
password |
isBlackUser |
age |
分數 |
|
|
aaa |
123456 |
TRUE |
0 |
20 |
60 |
|
aaa |
123456 |
FALSE |
20 |
40 |
80 |
|
ccc |
123456 |
TRUE |
40 |
100 |
100 |
用戶的資料如果滿足邏輯表中的某一潭訓得到為一的分數,
一.if-else
如果邏輯表有成百上千的資料,直接使用if else也是很難的,
二.DB
邏輯表建成資料庫的一張表(temp_table),直接通過sql搜索來得到分數
|
username |
password |
isBlackUser |
age_l |
age_r |
score |
|
aaa |
123456 |
TRUE |
0 |
20 |
60 |
|
bbb |
123456 |
FALSE |
20 |
40 |
80 |
|
ccc |
123456 |
TRUE |
40 |
100 |
100 |
Select score from temp_table where username = user.getUsername() and password = user.getPassword() and isBlackUser = user.getIsBlackUser() and age_r >= user.getAge() and age_l <= user.getAge();
三.Java
邏輯表列數是有限并且穩定的,行數會隨著用戶的個數變化
現在只需要把列的邏輯寫好,
public static Object exe(List<Map> tableList, HashMap<String, Object> data1){ for (Map map : tableList) { if( usernameMatch(map.get(username).toString(),data1.get(username).toString()) &&passwordMatch(map.get(password).toString(),data1.get(password).toString()) &&isBlackUserMatch((Boolean)map.get(isBlackUser),(Boolean)data1.get(isBlackUser)) &&ageMatch(map.get(age).toString(),(Integer)data1.get(age)) ) return map.get(result); } return null; } private static Boolean usernameMatch(String var0, String var1) { if (var0 != null) return var0.equals(var1); return false; } private static Boolean passwordMatch(String var0, String var1) { if (var0 != null) return var0.equals(var1); return false; } private static Boolean isBlackUserMatch(Boolean var0, Boolean var1) { if (var0 != null) return var0.equals(var1); return false; } private static Boolean ageMatch(String var0, Integer var1) { if (var0 != null && var1 != null) { String[] split = var0.split(","); if (split.length > 1) return Integer.parseInt(split[0]) <= var1 && Integer.parseInt(split[1]) >= var1; } return false; }java example
行數完全可以使用POI讀取excel,或其它方式讀取其它存盤的檔案,動態封裝大資料量的行數;但是這里僅僅是模擬,
//邏輯表資料 HashMap<String, Object> param1 = new HashMap<>(); param1.put(username, "aaa"); param1.put(password, "123456"); param1.put(isBlackUser, true); param1.put(age, "0,20"); param1.put(result, "40"); tableList.add(param1); HashMap<String, Object> param2 = new HashMap<>(); param2.put(username, "aaa"); param2.put(password, "123456"); param2.put(isBlackUser, false); param2.put(age, "20,40"); param2.put(result, "60"); tableList.add(param2); HashMap<String, Object> param3 = new HashMap<>(); param3.put(username, "ccc"); param3.put(password, "123456"); param3.put(isBlackUser, true); param3.put(age, "40,100"); param3.put(result, "100"); tableList.add(param3);java example
寫一個作為介面的方法
public static Object exe(List<Map> tableList, HashMap<String, Object> data1){ for (Map map : tableList) { if( usernameMatch(map.get(username).toString(),data1.get(username).toString()) &&passwordMatch(map.get(password).toString(),data1.get(password).toString()) &&isBlackUserMatch((Boolean)map.get(isBlackUser),(Boolean)data1.get(isBlackUser)) &&ageMatch(map.get(age).toString(),(Integer)data1.get(age)) ) return map.get(result); } return null; }java 執行
執行以下,看看效果
//用戶資料 User user = new User("ccc","123456",true,55); HashMap<String, Object> data1 = new HashMap<>(); data1.put(username, user.getUsername()); data1.put(password, user.getPassword()); data1.put(isBlackUser, user.getIsBlackUser()); data1.put(age, user.getAge()); Object exe = exe(tableList, data1); System.out.println(exe);

package com.ahd.excel_04.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TableTest { private static String username = "username"; private static String password = "password"; private static String isBlackUser = "isBlackUser"; private static String age = "age"; private static String result = "result"; //決策表的 實作方案 public static void main(String[] args) { List<Map> tableList = new ArrayList(); //邏輯表資料 HashMap<String, Object> param1 = new HashMap<>(); param1.put(username, "aaa"); param1.put(password, "123456"); param1.put(isBlackUser, true); param1.put(age, "0,20"); param1.put(result, "40"); tableList.add(param1); HashMap<String, Object> param2 = new HashMap<>(); param2.put(username, "aaa"); param2.put(password, "123456"); param2.put(isBlackUser, false); param2.put(age, "20,40"); param2.put(result, "60"); tableList.add(param2); HashMap<String, Object> param3 = new HashMap<>(); param3.put(username, "ccc"); param3.put(password, "123456"); param3.put(isBlackUser, true); param3.put(age, "40,100"); param3.put(result, "100"); tableList.add(param3); //用戶資料 User user = new User("ccc","123456",true,55); HashMap<String, Object> data1 = new HashMap<>(); data1.put(username, user.getUsername()); data1.put(password, user.getPassword()); data1.put(isBlackUser, user.getIsBlackUser()); data1.put(age, user.getAge()); Object exe = exe(tableList, data1); System.out.println(exe); } public static Object exe(List<Map> tableList, HashMap<String, Object> data1){ for (Map map : tableList) { if( usernameMatch(map.get(username).toString(),data1.get(username).toString()) &&passwordMatch(map.get(password).toString(),data1.get(password).toString()) &&isBlackUserMatch((Boolean)map.get(isBlackUser),(Boolean)data1.get(isBlackUser)) &&ageMatch(map.get(age).toString(),(Integer)data1.get(age)) ) return map.get(result); } return null; } private static Boolean usernameMatch(String var0, String var1) { if (var0 != null) return var0.equals(var1); return false; } private static Boolean passwordMatch(String var0, String var1) { if (var0 != null) return var0.equals(var1); return false; } private static Boolean isBlackUserMatch(Boolean var0, Boolean var1) { if (var0 != null) return var0.equals(var1); return false; } private static Boolean ageMatch(String var0, Integer var1) { if (var0 != null && var1 != null) { String[] split = var0.split(","); if (split.length > 1) return Integer.parseInt(split[0]) <= var1 && Integer.parseInt(split[1]) >= var1; } return false; } }完整代碼-核心
/*** * 物體類 User * 1. username,password,是否黑名單isBlackUser,age 四個值通過對區間的比較能唯一定位一個分數 */ @Data public class User { private String username; private String password; private Boolean isBlackUser; private Integer age; public User(String username, String password, Boolean isBlackUser, Integer age) { this.username = username; this.password = password; this.isBlackUser = isBlackUser; this.age = age; } }完整代碼-User
四.Excel自身函式實作
可以將用戶資訊匯入excel
通過excel函式實作
五.規則引擎
是專門處理業務邏輯的軟體,使用決策表能可是實作上面邏輯表的功能
最后打成jar包,直接呼叫即可
六. 存盤程序實作列的邏輯
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266894.html
標籤:Java
