簡體   English   中英

如何在樹集上搜索以找到大於或小於或不區分大小寫的值?

[英]How Can I Search on A Treeset to Find Values that Are Either Greater or Less Than or Case Insensitive?

我正在嘗試創建內存數據庫解決方案。 HashMapTreeSet 我知道如何使用包含來搜索值,如果這是正常的數據庫情況,這會更容易。 但是,如果我嘗試通過不區分大小寫的值或大於或小於此值的數值來搜索值,那么在這種情況下如何處理呢?

這是我的姓氏方法,但這只是一個簡單的包含,如果不區分大小寫,則找不到

case 4:
    Scanner input4 = new Scanner(System.in);
    System.out.println("Search Last Name ");
    String retLn = input4.nextLine();

    if(employeeKey.containsKey(retLn))
    {
          EmpManager searchedEmp = employeeKey.get(retLn);
          System.out.println(searchedEmp);
          System.out.println("");
    }

    else
    {
          System.out.println("No Last Name Found");
          System.out.println("");
    }

您可以將TreeMap與Custom Comparator

當您需要不區分大小寫的比較時:

new TreeMap<String,V>(String.CASE_INSENSITIVE_ORDER);

當您需要基於整數的比較時:

new TreeMap<Integer,V>(Comparator.naturalOrder());

或僅使用默認比較器:

new TreeMap<Integer,V>();

要查找大於或小於某個值的所有條目,請使用headMap(), tailMap() or subMap()

根據您當前的解決方案,只需確保每當添加到Map ,都將調到lowerCase使其不區分大小寫,這樣可以更輕松地與以后的用戶輸入進行比較,例如

if(employeeKey.containsKey(retLn.toLowerCase())) // considering the keys inside the map are all lowercase

如果以后要根據某個給定范圍進行搜索,則可以執行以下操作:

map.forEach((key, value) -> {
     if(key.equalsIgnoreCase(retLn) && value > someValue && value < someValue){
           // access the value here
     }
});

您可以在HashMap定義中覆蓋containsKey()方法。

例如:

HashMap<String, Integer> map = new HashMap<String, Integer>() {     
  @Override
  public boolean containsKey(Object key) {
    for (String s : this.keySet()) {
      String keyString = (String) key;
      if (keyString.equalsIgnoreCase(s)) 
        return true;
      }
      return false;
  }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM