java - 生成查找表
问题描述
使用属性文件在 Java 中表示“查找”表的最佳方式是什么:
假设我有这个lookup.properties文件:(虽然我认为在这种情况下使用属性文件是非常错误的)
(0,999)=/mnt/partition0/
(1000,1999)=/mnt/partition1/
(2000,2999)=/mnt/partition2/
(3000,3999)=/mnt/partition3/
(4000,4999)=/mnt/partition4/
(5000,5999)=/mnt/partition5/
(6000,6999)=/mnt/partition6/
(7000,7999)=/mnt/partition7/
还有一个方法
String id = "2001";
String partition = getPartitionPathById(id);
// returns /mnt/partition2/
解决方案
这是一个解决方案:
public class PartitionImpl implements Partition {
NavigableMap<Range, String> map;
public PartitionImpl() {
}
@Override public String getPartition(Application application) {
return getPartition(application.getAppId());
}
@Override public String getPartition(String appId) {
if(map == null) {
map = new TreeMap<Range, String>();
}
map.put(new Range(0, 999), "/mnt/partition0/");
map.put(new Range(1000, 1999), "/mnt/partition1/");
map.put(new Range(2000, 2999), "/mnt/partition2/");
map.put(new Range(3000, 3999), "/mnt/partition3/");
map.put(new Range(4000, 4999), "/mnt/partition4/");
map.put(new Range(5000, 5999), "/mnt/partition4/");
map.put(new Range(6000, 6999), "/mnt/partition6/");
map.put(new Range(7000, 7999), "/mnt/partition7/");
String idPart = appId.split("-")[1]; // return an integer value
Integer id = Integer.valueOf(idPart);
AtomicReference<String> thePartition = new AtomicReference<>();
map.entrySet().forEach(rangeStringEntry -> {
String partition = rangeStringEntry.getValue();
Range range = rangeStringEntry.getKey();
if(range.upper >= id && range.lower <= id) {
thePartition.set(partition);
}
});
return thePartition.get();
}
}
public class Range implements Comparable<Range> {
public int lower, upper;
public int value;
public Range(int lower, int upper) {
this.lower = lower;
this.upper = upper;
}
@Override public int compareTo(@NotNull Range range) {
if (range.lower == this.lower && range.upper == this.upper) {
return 0;
}
return -1;
}
}
推荐阅读
- deep-learning - torch.nn.conv2d 和 torch.nn.Linear 中的值
- java - Handler is Unreachable 语句
- dialogflow-es - 如何使用 googleflow 平台在电报下嵌入视频作为响应?
- php - Laravel 谷歌云应用引擎会话问题
- python - 如何创建指向列表的指针,以便通过指针访问提供不可变元素?
- python - Scipy.spatial 不包含“qhull”
- mysql - MySQL 如果不为空,则更新列 a,如果不为空,则更新列 b
- r - 所有数据框行到新列
- reactjs - 不等待 useEffect 中的数据
- python - 使用键元组对 python 字典进行排序并使用 lambda