我在 Java 中有一个 Range 类和一个比较器:
class Range{
int start;
int end;
}
class RangeComparator implements Comparator<Range> {
@Override
public int compare(Range range1, Range range2) {
//implementation
}
}
还有另一个具有嵌套映射的类;
class MyClass{
private static Map<String, Map<String, Map<Range, List<String>>>> nestedMap;
}
我需要:
如何实现?
在C++中,可以通过在nestedMap的声明中指定比较器来实现,如下所示:
struct Comp {
const bool operator()(const Range& range1, const Range& range2) const {
// implementation
}
};
class MyClass{
map<string, map<string, map<Range, vector<string>, Comp>>> nestedMap;
};
我想知道如何在 Java 中实现同样的目标。
您只能直接初始化最外层的映射,内部映射与一个键相关联,每个键都有自己的映射作为值。除非你事先知道按键并提前初始化,否则这是不可能的。
但是,只有在请求密钥时缺少值时,您才可以使用 Map.computeIfAbsent() 进行初始化。
如果指定的键尚未与值关联(或映射为 null),则尝试使用给定的映射函数计算其值并将其输入到此映射中,除非 null。
nestedMap
.computeIfAbsent("key", key -> new HashMap<>())
.computeIfAbsent("nextKey", key -> new TreeMap<>(new RangeComparator()));