Используйте список для реализации, подобных базе данных, между точными методами поиска
Кода -копия выглядит следующим образом:
public final Class Commonlocalquery <t Extends Map <String, Object >> {
// возвратный список после передачи в запросе данных, первый параметр: список запросов, второй параметр: условие запроса
Общественный список <T> QueryData (окончательный список <T> Malllist, Final Hashhashmap <политика, строка, строка> map) {
if (malllist == null | map == null) {
вернуть новый ArrayList <t> ();
}
if (malllist.isempty ()) {
вернуть Malllist;
}
/* Найти соответствующие условия запроса на основе фактических потребностей*/
SET <SIGIPTION> key1 = map.getFirstKeys ();
для (политика политики: Key1) {
Concurrenthashmap <string, string> tempmap = map.get (policy);
SET <String> key2 = tempmap.keyset ();
for (String Key: Key2) {
if (key.startswith ("-") || tempmap.get (key) == null ||
(tempmap.get (key)! = null && tempmap.get (key) .equals (""))) {
tempmap.remove (key);
}
}
}
// Найти шаблон проектирования цепочки ответственности
Фильтр фирмерной, фильтрации, FilterFuzzy;
FiLERTRENTROMAL = NEW FILERTRENTROML ();
Filterweed = новый Filterween ();
FilterFuzzy = new FilterFuzzy ();
fileternormal.setfilter (Filterwine);
FilterBith Между.setFilter (FilterFuzzy);
SET <LIGION> ENDKEY1 = MAP.GETFIRSTKEYS ();
Список <t> listresult = new ArrayList <t> ();
for (t resmap: malllist) {
для (политика политики: EndKey1) {
Concurrenthashmap <string, string> querymap = map.get (policy);
if (filternormal.dofilter (resmap, policy, QueryMap) && listresult.contains (resmap)) {
listresult.add (resmap);
}
}
}
вернуть listresult;
}
Public Static Enum Policy {Нормальная, между, нечеткая}
}
/*========= Цепочка ответственности Abstract Class ======*/
Абстрактный класс фильтр {
Фильтр фильтр;
public void setfilter (фильтр фильтра) {
this.filter = filter;
}
публичный фильтр getFilter () {
вернуть фильтр;
}
Abstract Boolean Dofilter (Map <String, Object> Resmap, политика политики, Map <String, String> QueryMap);
}
// Точный метод поиска
Класс Filternormal Extends Filter {
@Override
Boolean Dofilter (Map <String, Object> Resmap, политика политики, Map <String, String> QueryMap) {
// TODO Автогенерированный метод заглушка
if (police.name (). equalsignorecase (police.normal.name ())) {
Iterator <entry <string, string >> iterator = QueryMap.EntrySet (). Iterator ();
while (iterator.hasnext ()) {
Inpit <string, string> entry = iterator.next ();
if (! resmap.get (entry.getkey ()). toString ().
вернуть ложь;
}
}
} else if (filter! = null) {
return filter.dofilter (resmap, policy, QueryMap);
}
вернуть истину;
}
}
// между методом поиска
Фильтр класса между продлением фильтра {
@Override
Boolean Dofilter (Map <String, Object> Resmap, политика политики, Map <String, String> QueryMap) {
// TODO Автогенерированный метод заглушка
if (police.name (). equalsignorecase (police.between.name ())) {
Iterator <entry <string, string >> iterator = QueryMap.EntrySet (). Iterator ();
while (iterator.hasnext ()) {
Inpit <string, string> entry = iterator.next ();
if (! pattern.matches (".+? φ.+?", entry.getValue ())))
бросить новый неизвестный) («значения должны быть.+? φ.+? Pattern»);
String firstvalue = intry.getValue (). Split ("φ") [0];
String SecondValue = intry.GetValue (). Dipl ("φ") [1];
if (resmap.get (entry.getkey ()). ToString (). CompareTo (FirstValue) <0
||.
вернуть ложь;
}
}
} else if (filter! = null) {
return filter.dofilter (resmap, policy, QueryMap);
}
вернуть истину;
}
}
// Нечеткий метод поиска
класс FilterFuzzy Extends Filter {
@Override
Boolean Dofilter (Map <String, Object> Resmap, политика политики, Map <String, String> QueryMap) {
// TODO Автогенерированный метод заглушка
if (police.name (). equalsignorecase (police.fuzzy.name ())) {
String tempstr = resmap.values ().
Iterator <entry <string, string >> iterator = QueryMap.EntrySet (). Iterator ();
while (iterator.hasnext ()) {
Inpit <string, string> entry = iterator.next ();
if (tempstr.substring (1, tempstr.length ()-1) .contains (entry.getValue ())) {
вернуть истину;
}
}
} else if (filter! = null) {
return filter.dofilter (resmap, policy, QueryMap);
}
вернуть истину;
}
}
// справка класса реализует K1-K2-V
открытый класс hashhhashmap <k1, k2, v> {
Частный concurrenthashmap <k1, concurrenthashmap <K2, v >> k1k2vmap;
public hashhashmap () {
this.k1k2vmap = new concurrenthashmap <k1, concurrenthashmap <k2, v >> ();
}
public void put (k1 key1, k2 key2, v Значение) {
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?
}
public concurrenthashmap <k2, v> get (k1 key1) {
вернуть k1k2vmap.get (key1);
}
Public Boolean содержит (K1 Key1, K2 Key2) {
if (k1k2vmap.containskey (key1)) {
вернуть k1k2vmap.get (key1) .containskey (key2);
}
вернуть ложь;
}
Public Boolean Sovenskekey (K1 Key1) {
вернуть k1k2vmap.containskey (key1);
}
public void clear () {
if (k1k2vmap.size ()> 0) {
for (concurrenthashmap <k2, v> k2vmap: k1k2vmap.values ()) {
k2vmap.clear ();
}
k1k2vmap.clear ();
}
}
}
// конкретный метод использования
HASHHASHMAP <политика, строка, строка> map = new hashhashmap <commonlocalquery.policy, string, string> ();
для (int i = 0; i <QueryKey.length; i ++) {
map.put (police.normal, QueryKey [i], QueryValue [i]);
}
Список <map <string, object >> mtempist = new Commonlocalquery <hashmap <String, Object >> (