// Facility table attributes to be read in json format
String facilityName[], recApp[], recFacility[], sendApp[],
sendFacility[], enable[], doneness[], retryLimit[],
watchDelay[], retryDelay[], ackTimeout[],
keepConOpen[], sendTimeout[], cleanupDelay[],
host[], port[];
String facilityTableAttrs[][] = new String[][] {
facilityName, recApp, recFacility, sendApp,
sendFacility, enable, doneness, retryLimit,
watchDelay, retryDelay, ackTimeout, keepConOpen,
sendTimeout, cleanupDelay, host, port};
我有一些名为facilityTableAttrs的数组,如上所述。
我有两个问题:
1)是否可以一步完成上述数组声明?
2)我希望使用以下内容获取这些1D数组的各个数组名称:
for(i = 0; i < facilityTableAttrs.length; i++) {
System.out.println(facilityTableAttrs[i].toString());
}
但它失败了。如何将单个数组名称作为字符串?
答案 0 :(得分:1)
您声明的第一个阵列列表似乎不会在任何地方初始化。
因此它们是null
,并且在它们中的任何一个上调用toString
将导致NullPointerException
被抛出,因此&#34;它失败&#34;。
顺便说一句,在非null数组上调用toString
实际上会打印类似于Object.toString
表示的东西,这不是你想要的(Arrays.toString(myArray)
是你的朋友)
您可以初始化每个单独的数组,并在将它们添加到主String[][]
之前选择性地填充它们,但我建议您不要这样做。
相反,调查集合框架。
您可以使用的是Map<String, List<String>>
。
或者更好,甚至是具有List<String> facilityName
,List<String> recApp
等属性的自定义对象。
最后,请注意变量命名,根据code conventions camelBack 。
答案 1 :(得分:0)
这对阵列来说是不可能的。您需要使用地图,如下所示:
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
您需要为您的问题选择正确的数据结构。
数组仅用于存储值,但它们对于它们的边界名称不感兴趣。 另一方面的地图很适合任何类型的值的边界名称(唯一的键)。
答案 2 :(得分:0)
我建议使用包装类:
public class Facility {
private final String name;
private final List<String> values;
public Facility(String name) {
this.name = name;
this.values = new ArrayList<>();
}
public String getName() {
return name;
}
public List<String> getValues() {
return values;
}
}
然后执行:
Facility[] facilities = new Facility[] {
new Facility("facility 1"),
new Facility("facility 2"),
new Facility("facility 3"),
new Facility("facility 4"),
};
for(Facility facility : facilities) {
System.out.println(facility.getName());
}
要为您要执行的设施添加值:
Facility facility = facilities.get(0);
facility.getValues().add("bla");
如果您需要按名称查找设施,请使用地图而不是数组:
...
// see createLookup method below
Map<String, Facility> facilities = createLookup(
new Facility("facility 1"),
new Facility("facility 2"),
new Facility("facility 3"),
new Facility("facility 4"));
// print names
for(Facility facility : facilities.values()) {
System.out.println(facility.getName());
}
// add a value
Facility facility = facilities.get("facility 3");
facility.getValues().add("bla");
}
private Map<String, Facility> createLookup(Facility.. facilities) {
// use TreeMap to have sorted keys
Map<String, Facility> lookup = new TreeMap<>();
for(Facility facility : facilities) {
lookup.put(facility.getName(), facility);
}
return lookup;
}