Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在树映射中使用部分键搜索值_Java_Search_Treemap - Fatal编程技术网

Java 如何在树映射中使用部分键搜索值

Java 如何在树映射中使用部分键搜索值,java,search,treemap,Java,Search,Treemap,我需要用部分键在树映射中搜索一个值 我尝试使用HashMap,但失败了 TreeMap<String, BigDecimal> mapYr1 = new TreeMap<String, BigDecimal>(); mapYr1.put("abcdef",100.00); 这里我只知道“abcd”。我不确定键的“ef”部分。不直接确定,但您可以查看条目并搜索它: public static BigDecimal findPartialKey(Map<String

我需要用部分键在树映射中搜索一个值

我尝试使用HashMap,但失败了

TreeMap<String, BigDecimal> mapYr1 = new TreeMap<String, BigDecimal>();

mapYr1.put("abcdef",100.00);

这里我只知道“abcd”。我不确定键的“ef”部分。

不直接确定,但您可以查看条目并搜索它:

public static BigDecimal findPartialKey(Map<String, BigDecimal> map, String search) {
    return map.entrySet()
              .stream()
              .filter(e -> e.getKey().startsWith(search))
              .map(Map.Entry::getValue)
              .findFirst()
              .orElse(null);
}

似乎与您的相关。Trie数据结构在这里似乎相关,但这仍然很棘手。假设我们在地图中的键是
abc
abc
,您所拥有的就是
ab
。您会选择哪一个,因为地图中有多个键具有相同的前缀?
public static BigDecimal findPartialKey(Map<String, BigDecimal> map, String search) {
    return map.entrySet()
              .stream()
              .filter(e -> e.getKey().startsWith(search))
              .map(Map.Entry::getValue)
              .findFirst()
              .orElse(null);
}
public static BigDecimalfindPartialKey(SortedMap<String, BigDecimal> map, String search) {
    Iterator<Map.Entry<String, Double>> iter = map.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry<String, Double> entry = iter.next();
        String key = entry.getKey();
        if (key.startsWith(search)) {
            return entry.getValue();
        }
        if (key.compareTo(search) > 0) {
            return null;
        }
    }
    return null;
}