首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 記憶體資料查詢框架:實作類 SQL 的 LIKE、BETWEEN、精確比對

     編輯:Java 相關知識

設計目標

在不使用資料庫的情況下,對 List<Map<String, Object>> 提供類 SQL 的多條件查詢能力,支援精確、範圍、模糊三種模式。

核心架構:責任鏈模式

  • FilterNormal:精確比對(contains)
  • FilterBetween:範圍查詢(以 Φ 分隔上下界)
  • FilterFuzzy:模糊查詢(跨欄位字串搜尋)

關鍵類別

// 多層 Map:POLICY -> (field -> value)
public class HashHashMap<K1, K2, V> { /* 略 */ }

public enum POLICY { NORMAL, BETWEEN, FUZZY }

// 抽象過濾器
abstract class Filter {
    Filter next;
    public void setNext(Filter n) { next = n; }
    abstract boolean doFilter(Map<String, Object> row, POLICY p, Map<String, String> cond);
}

// 查詢入口
public final class CommonLocalQuery<T extends Map<String, Object>> {
    public List<T> query(List<T> data, HashHashMap<POLICY, String, String> cond) {
        if (data == null || cond == null) return new ArrayList<>();
        Filter chain = new FilterNormal();
        chain.setNext(new FilterBetween()).setNext(new FilterFuzzy());

        List<T> result = new ArrayList<>();
        for (T row : data) {
            boolean ok = true;
            for (POLICY p : cond.getFirstKeys()) {
                if (!chain.doFilter(row, p, cond.get(p))) { ok = false; break; }
            }
            if (ok) result.add(row);
        }
        return result;
    }
}

使用範例

var q = new HashHashMap<POLICY, String, String>();
q.put(POLICY.NORMAL, "name", "John");
q.put(POLICY.BETWEEN, "age", "20Φ30");
q.put(POLICY.FUZZY, "desc", "engineer");

List<Map<String, Object>> result = new CommonLocalQuery<>().query(dataList, q);

適用場景

  • 中小型記憶體資料集(< 10 萬筆)的即時篩選。
  • 單元測試或離線資料處理,避免啟動資料庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved