Java 生成查找表

Java 生成查找表,java,Java,使用属性文件在Java中表示“查找”表的最佳方法是什么: 假设我有这个lookup.properties文件:(尽管我认为在这种情况下使用属性文件是非常错误的) 和一种方法 String id = "2001"; String partition = getPartitionPathById(id); // returns /mnt/partition2/ 这里有一个解决方案: public class PartitionImpl implements Partition

使用属性文件在Java中表示“查找”表的最佳方法是什么:

假设我有这个lookup.properties文件:(尽管我认为在这种情况下使用属性文件是非常错误的)

和一种方法

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();
  }

}
公共类分区MPL实现分区{
导航地图;
公共分区mpl(){
}
@重写公共字符串getPartition(应用程序){
返回getPartition(application.getAppId());
}
@重写公共字符串getPartition(字符串appId){
if(map==null){
map=newtreemap();
}
map.put(新范围(0999),“/mnt/partition0/”;
map.put(新范围(10001999),“/mnt/partition1/”;
map.put(新范围(20002999),“/mnt/partition2/”;
map.put(新范围(30003999),“/mnt/partition3/”;
map.put(新范围(40004999),“/mnt/partition4/”;
map.put(新范围(50005999),“/mnt/partition4/”;
map.put(新范围(60006999),“/mnt/partition6/”;
map.put(新范围(70007999),“/mnt/partition7/”;
字符串idPart=appId.split(“-”[1];//返回一个整数值
整数id=整数.valueOf(idPart);
AtomicReference分区=新的AtomicReference();
map.entrySet().forEach(rangeStringEntry->{
String partition=rangeStringEntry.getValue();
Range Range=rangeStringEntry.getKey();

如果(range.upper>=id&&range.lower您可以尝试使用hashmap。创建一个自定义类来保存id范围和分区路径。getPartitionPathById方法将是自定义类的一个方法。您可以将自定义类的实例放在列表中,因为您只有8个范围。我建议在中心位置,就像数据库一样:json低、高和值作为路径的关键数组。这将使您能够动态地更改它,而不受任何限制。此外,读取json对象不会花费时间,因为您已经在处理范围
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;
  }
}