استخدم قائمة لتنفيذ طرق البحث الدقيقة بين قاعدة البيانات
نسخة الكود كما يلي:
الفئة النهائية العامة الشائعة <T يمتد الخريطة <string ، Object >> {
// قائمة الإرجاع بعد تمرير استعلام البيانات ، المعلمة الأولى: قائمة الاستعلام ، المعلمة الثانية: حالة الاستعلام
القائمة العامة <T> QueryData (القائمة النهائية <T> Malllist ، HASHHASHMAP النهائي <السياسة ، سلسلة ، سلسلة> خريطة) {
if (malllist == null | map == null) {
إرجاع ArrayList جديد <T> () ؛
}
if (malllist.isempty ()) {
مرور المراجع ؛
}
/* ابحث عن شروط الاستعلام المطابقة بناءً على الاحتياجات الفعلية*/
SET <SILOMN> KEY1 = MAP.GETFIRSTKEYS () ؛
لـ (سياسة السياسة: key1) {
concurrenthashMap <string ، string> tempmap = map.get (policy) ؛
SET <STRING> KEY2 = TEMPMAP.KEYSET () ؛
لـ (مفتاح السلسلة: key2) {
if (key.startswith ("-") || tempmap.get (key) == null ||
(tempmap.get (مفتاح)! = null && tempmap.get (مفتاح) .equals (""))) {
tempmap.remove (مفتاح) ؛
}
}
}
// ابحث عن نمط تصميم سلسلة المسؤولية
تصفية filternormal ، filterbetbetween ، filterfuzzy ؛
filternormal = new filternormal () ؛
filterbetween = filterbetbetween () ؛
filterfuzzy = جديد filterfuzzy () ؛
filternormal.setFilter (filterbetween) ؛
filterbetween.setFilter (filterfuzzy) ؛
SET <SILOMN> endKey1 = map.getfirstkeys () ؛
قائمة <T> listresult = new ArrayList <T> () ؛
لـ (t resmap: malllist) {
لـ (سياسة السياسة: endkey1) {
concurrenthashMap <string ، string> querymap = map.get (policy) ؛
if (filternormal.dofilter (resmap ، السياسة ، QueryMap) && listresult.contains (resmap)) {
listresult.add (resmap) ؛
}
}
}
إرجاع Listresult ؛
}
سياسة التعداد الثابت العام {عادي ، بين ، غامض}
}
بر
مرشح الفئة التجريدية {
مرشح مرشح.
public void setFilter (مرشح التصفية) {
this.filter = filter ؛
}
مرشح عام getFilter () {
مرشح الإرجاع
}
DOFILTER Boolean Dofilter (MAP <String ، Object> resmap ، سياسة السياسة ، الخريطة <string ، string> QueryMap) ؛
}
// طريقة بحث دقيقة
فئة فئة Filternormal يمتد مرشح {
@تجاوز
Boolean Dofilter (Map <String ، Object> resmap ، سياسة السياسة ، الخريطة <string ، string> querymap) {
// TODO METHOTION METTOD COBS
if (policy.name (). equalsignorecase (policy.normal.name ())) {
iterator <intern <string ، string >> iterator = querymap.entryset (). iterator () ؛
بينما (iterator.hasnext ()) {
الإدخال <string ، string> intpl = iterator.next () ؛
if (! resmap.get (intrad.getKey ()). ToString ().
العودة كاذبة
}
}
} آخر إذا (مرشح! = فارغ) {
Return Filter.Dofilter (Resmap ، السياسة ، QueryMap) ؛
}
العودة صحيح.
}
}
// بين طريقة البحث
مرشح الفئة بين تمديد مرشح {
@تجاوز
Boolean Dofilter (Map <String ، Object> resmap ، سياسة السياسة ، الخريطة <string ، string> querymap) {
// TODO METHOTION METTOD COBS
if (policy.name (). equalsignorecase (policy.between.name ())) {
iterator <intern <string ، string >> iterator = querymap.entryset (). iterator () ؛
بينما (iterator.hasnext ()) {
الإدخال <string ، string> intpl = iterator.next () ؛
if (! pattern.matches (".
رمي جديد غير معروف ("يجب أن تكون القيم.+؟ φ.+؟ نمط") ؛
String FirstValue = intrad.getValue (). split ("φ") [0] ؛
String SecondValue = intrad.getValue (). split ("φ") [1] ؛
if (resmap.get (enter.getKey ())
||.
العودة كاذبة
}
}
} آخر إذا (مرشح! = فارغ) {
Return Filter.Dofilter (Resmap ، السياسة ، QueryMap) ؛
}
العودة صحيح.
}
}
// طريقة البحث الغامضة
فئة filterfuzzy يمتد مرشح {
@تجاوز
Boolean Dofilter (Map <String ، Object> resmap ، سياسة السياسة ، الخريطة <string ، string> querymap) {
// TODO METHOTION METTOD COBS
if (policy.name (). equalsignorecase (policy.fuzzy.name ())) {
String TempStr = resmap.values ().
iterator <intern <string ، string >> iterator = querymap.entryset (). iterator () ؛
بينما (iterator.hasnext ()) {
الإدخال <string ، string> intpl = iterator.next () ؛
if (tempstr.substring (1 ، tempstr.length ()-1). contains (intpling.getValue ())) {
العودة صحيح.
}
}
} آخر إذا (مرشح! = فارغ) {
Return Filter.Dofilter (Resmap ، السياسة ، QueryMap) ؛
}
العودة صحيح.
}
}
// فئة المساعدة تنفذ K1-K2-V
الطبقة العامة hashashmap <k1 ، k2 ، v> {
concurrenthashmap <k1 ، concurrenthashmap <k2 ، v >> k1k2vmap ؛
hashashmap () {
this.k1k2vmap = concurrenthashmap <k1 ، concurrenthashmap <k2 ، v >> () ؛
}
Public Void PUT (K1 KEY1 ، K2 KEY2 ، V value) {
if (k1k2vmap.containskey (key1)) {
concurrenthashmap <k2 ، v> k2vmap = k1k2vmap.get (key1) ؛
k2vmap.put (key2 ، value) ؛
} آخر {
concurrenthashmap <k2 ، v> k2vmap = new concurrenthashmap <k2 ، v> () ؛
k2vmap.put (key2 ، value) ؛
K1K2VMAP.put (key1 ، K2VMAP) ؛
}
}
مجموعة عامة <k1> getFirstkeys () {
إرجاع k1k2vmap.keyset () ؛
}
Public V GET (K1 KEY1 ، K2 KEY2) {
concurrenthashmap <k2 ، v> k2_v = k1k2vmap.get (key1) ؛
إرجاع k2_v == null؟
}
concurrenthashmap <k2 ، v> get (k1 key1) {
return K1K2VMAP.get (key1) ؛
}
يحتوي Boolean العام على Key (K1 Key1 ، K2 Key2) {
if (k1k2vmap.containskey (key1)) {
return K1K2VMAP.get (key1) .ContainsKey (key2) ؛
}
العودة كاذبة
}
يحتوي منطقية عامة على Keykey (K1 Key1) {
إرجاع k1k2vmap.containskey (key1) ؛
}
الفراغ العام clear () {
if (k1k2vmap.size ()> 0) {
لـ (concurrenthashmap <k2 ، v> k2vmap: k1k2vmap.values ()) {
k2vmap.clear () ؛
}
k1k2vmap.clear () ؛
}
}
}
// طريقة استخدام محددة
hashhashmap <policy ، string ، string> map = new hashashMap <commonlocalquery.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 >> (