ใช้รายการเพื่อใช้ฐานข้อมูลที่เหมือนระหว่างวิธีการค้นหาที่แม่นยำ
การคัดลอกรหัสมีดังนี้:
คลาสสุดท้ายระดับสุดท้าย CommonLocalQuery <T ขยายแผนที่ <String, Object >> {
// รายการส่งคืนหลังจากผ่านการสืบค้นข้อมูลพารามิเตอร์แรก: รายการสอบถามพารามิเตอร์ที่สอง: เงื่อนไขการสืบค้น
รายการสาธารณะ <t> queryData (รายการสุดท้าย <t> malllist, hashhashmap สุดท้าย <นโยบาย, สตริง, สตริง> แผนที่) {
if (malllist == null | map == null) {
ส่งคืน ArrayList ใหม่ <T> ();
-
if (malllist.isempty ()) {
คืน Malllist;
-
/* ค้นหาเงื่อนไขการสืบค้นที่ตรงกันตามความต้องการที่แท้จริง*/
ตั้งค่า <policy> key1 = map.getfirstkeys ();
สำหรับ (นโยบายนโยบาย: key1) {
ConcurrentHashMap <String, String> TempMap = map.get (นโยบาย);
ตั้งค่า <string> key2 = tempmap.keyset ();
สำหรับ (คีย์สตริง: key2) {
if (key.startswith ("-") || tempmap.get (คีย์) == null ||
(tempmap.get (คีย์)! = null && tempmap.get (คีย์) .equals (""))) {
tempmap.remove (กุญแจ);
-
-
-
// ค้นหารูปแบบการออกแบบห่วงโซ่ความรับผิดชอบ
ตัวกรองตัวกรอง, ตัวกรอง, ตัวกรอง, filterfuzzy;
filternormal = new filternormal ();
FilterBetween = FilterBetween ใหม่ ();
FilterFuzzy = new FilterFuzzy ();
filternormal.setFilter (FilterBetween);
FilterBetween.setFilter (FilterFuzzy);
ตั้งค่า <policy> endkey1 = map.getfirstkeys ();
รายการ <t> listresult = new ArrayList <T> ();
สำหรับ (t resmap: malllist) {
สำหรับ (นโยบายนโยบาย: endkey1) {
ConcurrentHashMap <String, String> queryMap = map.get (นโยบาย);
if (filternormal.dofilter (resmap, นโยบาย, querymap) && listresult.contains (resmap)) {
listresult.add (resmap);
-
-
-
กลับ Listresult;
-
นโยบาย enum คงที่สาธารณะ {ปกติระหว่าง, ฟัซซี่}
-
/*========= ความรับผิดชอบโซ่ความรับผิดชอบคลาสนามธรรม =======*/
ตัวกรองคลาสนามธรรม {
ตัวกรองตัวกรอง;
โมฆะสาธารณะ setFilter (ตัวกรองตัวกรอง) {
this.filter = ตัวกรอง;
-
ตัวกรองสาธารณะ getFilter () {
ตัวกรองส่งคืน;
-
บทคัดย่อบูลีน dofilter (แผนที่ <สตริง, วัตถุ> resmap, นโยบายนโยบาย, แผนที่ <สตริง, สตริง> queryMap);
-
// วิธีการค้นหาที่แม่นยำ
คลาส Filternormal ขยายตัวกรอง {
@Override
บูลีน dofilter (แผนที่ <สตริง, วัตถุ> resmap, นโยบายนโยบาย, แผนที่ <สตริง, สตริง> queryMap) {
// todo วิธีการที่สร้างขึ้นอัตโนมัติสตับ
if (policy.name (). equalsignorecase (policy.normal.name ())) {
Iterator <entry <string, string >> iterator = queryMap.entrySet (). iterator ();
ในขณะที่ (iterator.hasnext ()) {
รายการ <string, string> entry = iterator.next ();
if (! resmap.get (entry.getKey ()). toString (). มี (entry.getValue ())) {
กลับเท็จ;
-
-
} อื่นถ้า (ตัวกรอง! = null) {
return filter.dofilter (resmap, นโยบาย, querymap);
-
กลับมาจริง;
-
-
// ระหว่างวิธีการค้นหา
คลาส FilterBetween ขยายตัวกรอง {
@Override
บูลีน dofilter (แผนที่ <สตริง, วัตถุ> resmap, นโยบายนโยบาย, แผนที่ <สตริง, สตริง> queryMap) {
// todo วิธีการที่สร้างขึ้นอัตโนมัติสตับ
if (policy.name (). equalsignorecase (policy.between.name ())) {
Iterator <entry <string, string >> iterator = queryMap.entrySet (). iterator ();
ในขณะที่ (iterator.hasnext ()) {
รายการ <string, string> entry = iterator.next ();
if (! pattern.matches (".+? φ.+?", entry.getValue ()))
โยน unknownerror ใหม่ ("ค่าควรเป็น+? φ.+? pattern");
String FirstValue = entry.getValue (). แยก ("φ") [0];
String SecondValue = entry.getValue (). แยก ("φ") [1];
if (resmap.get (entry.getKey ()). TOSTRING (). compereto (FirstValue) <0
||
กลับเท็จ;
-
-
} อื่นถ้า (ตัวกรอง! = null) {
return filter.dofilter (resmap, นโยบาย, querymap);
-
กลับมาจริง;
-
-
// วิธีการค้นหาฟัซซี่
คลาส FilterFuzzy ขยายตัวกรอง {
@Override
บูลีน dofilter (แผนที่ <สตริง, วัตถุ> resmap, นโยบายนโยบาย, แผนที่ <สตริง, สตริง> queryMap) {
// todo วิธีการที่สร้างขึ้นอัตโนมัติสตับ
if (policy.name (). equalsignorecase (policy.fuzzy.name ())) {
String tempStr = resmap.values (). toString (). แทนที่ ("", ""). reflace (",", "");
Iterator <entry <string, string >> iterator = queryMap.entrySet (). iterator ();
ในขณะที่ (iterator.hasnext ()) {
รายการ <string, string> entry = iterator.next ();
if (tempstr.substring (1, tempstr.length ()-1) .contains (entry.getValue ())) {
กลับมาจริง;
-
-
} อื่นถ้า (ตัวกรอง! = null) {
return filter.dofilter (resmap, นโยบาย, querymap);
-
กลับมาจริง;
-
-
// Help Class ใช้ K1-K2-V
ชั้นเรียนสาธารณะ HashHhashMap <K1, K2, V> {
Private ConcurrentHashMap <K1, ConcurrentHashMap <K2, V >> K1K2VMAP;
public hashhashmap () {
this.k1k2vmap = ใหม่พร้อมกันพร้อมกัน <K1, พร้อมกันกับ <K2, v >> ();
-
โมฆะสาธารณะใส่ (K1 key1, k2 key2, v ค่า V) {
if (k1k2vmap.containskey (key1)) {
ConcurrentHashMap <K2, V> K2VMAP = K1K2VMAP.GET (KEY1);
k2vmap.put (key2, ค่า);
} อื่น {
ConcurrentHashMap <K2, V> K2VMAP = ใหม่พร้อมกันใหม่ HASHMAP <K2, V> ();
k2vmap.put (key2, ค่า);
k1k2vmap.put (key1, k2vmap);
-
-
ชุดสาธารณะ <K1> getFirstKeys () {
ส่งคืน k1k2vmap.keyset ();
-
สาธารณะ v รับ (k1 key1, k2 key2) {
ConcurrentHashMap <K2, V> K2_V = K1K2VMap.get (key1);
ส่งคืน k2_v == null?
-
Public ConcurrentHashMap <K2, V> GET (K1 Key1) {
ส่งคืน k1k2vmap.get (key1);
-
บูลีนสาธารณะมีคีย์ (K1 key1, k2 key2) {
if (k1k2vmap.containskey (key1)) {
ส่งคืน k1k2vmap.get (key1) .containskey (key2);
-
กลับเท็จ;
-
บูลีนสาธารณะมีคีย์ (K1 key1) {
ส่งคืน k1k2vmap.containskey (key1);
-
โมฆะสาธารณะ Clear () {
if (k1k2vmap.size ()> 0) {
สำหรับ (ConcurrentHashMap <K2, V> K2VMAP: K1K2VMAP.Values ()) {
k2vmap.clear ();
-
k1k2vmap.clear ();
-
-
-
// วิธีการใช้งานเฉพาะ
hashhashmap <นโยบาย, สตริง, สตริง> map = new hashhashmap <CommanLocalQuery.policy, String, String> ();
สำหรับ (int i = 0; i <querykey.length; i ++) {
map.put (policy.normal, querykey [i], queryValue [i]);
-
รายการ <map <string, object >> mtemplist = new CommonLocalQuery <hashmap <string, object >> (