一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java使用list實現數據庫的like功能

java使用list實現數據庫的like功能

2019-11-17 14:17java教程網 JAVA教程

這篇文章主要介紹了java使用list實現數據庫的like功能,需要的朋友可以參考下

使用list實現類似數據庫的like,between,精確查找方法

 

復制代碼代碼如下:

public final class CommonLocalQuery<T extends Map<String, Object>> {

 //傳入數據查詢后返回list, 第一個參數:被查詢列表,第二個參數:查詢條件
 public List<T> queryData(final List<T> mAllList, final HashHashMap<POLICY, String, String> map) {

  if(mAllList == null | map == null) {
   return new ArrayList<T>();
  }

  if(mAllList.isEmpty()) {
   return mAllList;
  }

  /* 根據實際需要找出符合的查詢條件 */
  Set<POLICY> key1 = map.getFirstKeys();
  for (POLICY policy : 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);
    }
   }
  }
// 責任鏈設計模式進行查找
  Filter filterNormal, filterBetween, filterFuzzy;
  filterNormal = new FilterNormal();
  filterBetween = new FilterBetween();
  filterFuzzy = new FilterFuzzy();
  filterNormal.setFilter(filterBetween);
  filterBetween.setFilter(filterFuzzy);
  Set<POLICY> endKey1 = map.getFirstKeys();
  List<T> listResult = new ArrayList<T>();
  for (T resMap : mAllList) {
   for (POLICY policy : endKey1) {
    ConcurrentHashMap<String, String> queryMap = map.get(policy);
    if (filterNormal.doFilter(resMap, policy, queryMap) && listResult.contains(resMap)) {
     listResult.add(resMap);
    }
   }
  }
  return listResult;
 }

 public static enum POLICY { NORMAL, BETWEEN, FUZZY }
}

 

/*======== 責任鏈抽象類 ======*/
abstract class Filter {

 Filter filter;

 public void setFilter(Filter filter) {
  this.filter = filter;
 }

 public Filter getFilter() {
  return filter;
 }

 abstract boolean doFilter(Map<String, Object> resMap, POLICY policy, Map<String, String> queryMap);
}
//精確查找方式
class FilterNormal extends Filter {

 @Override
 boolean doFilter(Map<String, Object> resMap, POLICY policy, Map<String, String> queryMap) {
  // TODO Auto-generated method stub
  if (policy.name().equalsIgnoreCase(POLICY.NORMAL.name())) {
   Iterator<Entry<String, String>> iterator = queryMap.entrySet().iterator();
   while(iterator.hasNext()) {
    Entry<String, String> entry = iterator.next();
    if(!resMap.get(entry.getKey()).toString().contains(entry.getValue())) {
     return false;
    }
   }
  } else if (filter != null) {
   return filter.doFilter(resMap, policy, queryMap);
  }
  return true;
 }
}
//between查找方式
class FilterBetween extends Filter {

 @Override
 boolean doFilter(Map<String, Object> resMap, POLICY policy, Map<String, String> queryMap) {
  // TODO Auto-generated method stub
  if (policy.name().equalsIgnoreCase(POLICY.BETWEEN.name())) {
   Iterator<Entry<String, String>> iterator = queryMap.entrySet().iterator();
   while(iterator.hasNext()) {
    Entry<String, String> entry = iterator.next();
    if(!Pattern.matches(".+?Φ.+?", entry.getValue())) 
     throw new UnknownError("Values should be .+?Φ.+? pattern");
    String firstValue = entry.getValue().split("Φ")[0];
    String secondValue = entry.getValue().split("Φ")[1];
    if(resMap.get(entry.getKey()).toString().compareTo(firstValue) < 0 
      || resMap.get(entry.getKey()).toString().compareTo(secondValue) > 0) {
     return false;
    }
   }
  } else if (filter != null) {
   return filter.doFilter(resMap, policy, queryMap);
  }
  return true;
 }
}
//模糊查找方式
class FilterFuzzy extends Filter {

 @Override
 boolean doFilter(Map<String, Object> resMap, POLICY policy, Map<String, String> queryMap) {
  // TODO Auto-generated method stub
  if (policy.name().equalsIgnoreCase(POLICY.FUZZY.name())) {
   String tempStr = resMap.values().toString().replace(" ", "").replace(",", "");
   Iterator<Entry<String, String>> iterator = queryMap.entrySet().iterator();
   while(iterator.hasNext()) {
    Entry<String, String> entry = iterator.next();
    if(tempStr.substring(1, tempStr.length()-1).contains(entry.getValue())) {
     return true;
    }
   }
  } else if (filter != null) {
   return filter.doFilter(resMap, policy, queryMap);
  }
  return true;
 }
}


//幫助類實現 k1-k2-v
public class HashHashMap<K1, K2, V> {

    private ConcurrentHashMap<K1, ConcurrentHashMap<K2, V>> k1k2vMap;

    public HashHashMap() {
        this.k1k2vMap = new 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);
        } else {
            ConcurrentHashMap<K2, V> k2vMap = new ConcurrentHashMap<K2, V>();
            k2vMap.put(key2, value);
            k1k2vMap.put(key1, k2vMap);
        }
    }

    public Set<K1> getFirstKeys() {
        return k1k2vMap.keySet();
    }

    public V get(K1 key1, K2 key2) {
        ConcurrentHashMap<K2, V> k2_v = k1k2vMap.get(key1);
        return k2_v == null ? null : k2_v.get(key2);
    }

    public ConcurrentHashMap<K2, V> get(K1 key1) {
        return k1k2vMap.get(key1);
    }

    public boolean containsKey(K1 key1, K2 key2) {
        if (k1k2vMap.containsKey(key1)) {
            return k1k2vMap.get(key1).containsKey(key2);
        }
        return false;
    }

    public boolean containsKey(K1 key1) {
        return k1k2vMap.containsKey(key1);
    }

    public void clear() {
        if (k1k2vMap.size() > 0) {
            for (ConcurrentHashMap<K2, V> k2vMap : k1k2vMap.values()) {
                k2vMap.clear();
            }
            k1k2vMap.clear();
        }
    }
}

//具體使用方式
HashHashMap<POLICY, String, String> map = new HashHashMap<CommonLocalQuery.POLICY, String, String>();
  for(int i = 0; i < queryKey.length; i++){
   map.put(POLICY.NORMAL, queryKey[i], queryValue[i]);
  }
List<Map<String, Object>> mTempList = new CommonLocalQuery<HashMap<String, Object>>(

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品αv一区二区三区 亚洲精品91大神在线观看 | 国产免费福利片 | 丝袜足液精子免费视频 | 91污无限制破解安卓2021 | 爽好舒服把腿张小说 | 黑人好大好硬好深好爽想要h | 艹出白浆| 国产成人永久免费视 | 91大神大战高跟丝袜美女 | 操熟美女又肥又嫩的骚屁股 | 调教麻麻成贱m | 国产美女久久久久 | 胸大的姑娘中文字幕视频 | 国内精品视频九九九九 | 1717国产精品视频免费 | 邪恶肉肉全彩色无遮琉璃神社 | 石原莉奈adn093店长未婚妻 | 成人资源影音先锋久久资源网 | 福利视频导航大全 | 亚洲经典激情春色另类 | 国产精品亚洲精品日韩已方 | 天天做天天爱天天爽综合区 | 国产高清专区 | 久久久精品国产免费A片胖妇女 | 亚洲经典激情春色另类 | 国产私人影院 | 黑人艹| 美女污视频 | 丁香久久婷婷 | 暖暖高清日本在线 | 好 舒服 好 粗 好硬免费视频 | 日韩精品一区二区三区毛片 | 91麻豆国产福利在线观看 | 日日免费视频 | h版在线观看 | 男人把大ji巴放进女人小说 | 国产成人8x视频一区二区 | hd最新国产人妖ts视频 | 波多野结衣中文字幕在线 | 九九成人免费视频 | 强波多野结衣女教师 |