Java 如何获取单个数组名作为数组数组的字符串
如上所述,我声明了一个名为facilityTableAttrs的数组数组 我有两个问题: 1) 是否可以在一个步骤中完成上述数组声明 2) 我希望通过以下方式获得这些1D阵列的单个阵列名称:Java 如何获取单个数组名作为数组数组的字符串,java,arrays,Java,Arrays,如上所述,我声明了一个名为facilityTableAttrs的数组数组 我有两个问题: 1) 是否可以在一个步骤中完成上述数组声明 2) 我希望通过以下方式获得这些1D阵列的单个阵列名称: // Facility table attributes to be read in json format String facilityName[], recApp[], recFacility[], sendApp[], sendFacility[], enable[], donene
// 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};
for(i=0;i
但它失败了。如何将单个数组名获取为字符串?您声明的第一个数组列表似乎没有在任何地方初始化 因此,它们是
null
,对其中任何一个调用toString
,都会导致抛出NullPointerException
,因此“它失败”
顺便说一下,在非空数组上调用toString
实际上会打印类似于对象.toString
表示的内容,这不是您想要的(Arrays.toString(myArray)
是您的朋友)
在将它们添加到主字符串[]【】
之前,您可以初始化每个数组并选择性地填充它们,但我建议您不要这样做
相反,研究集合框架
这里可以使用的是地图
甚至更好的是,一个具有属性的自定义对象,例如List facilityName
,List recApp
,等等
最后,请注意变量命名,根据。这在数组中是不可能的。您需要使用地图,如下所示:
for(i = 0; i < facilityTableAttrs.length; i++) {
System.out.println(facilityTableAttrs[i].toString());
}
Map myMap=newhashmap();
您需要为您的问题选择正确的数据结构
数组仅用于存储值,它们对名称的边界不感兴趣。
另一方面,映射非常适合将名称(唯一的键)绑定到任何类型的值。我建议使用包装类:
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
要为设施增加价值,您需要执行以下操作:
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");
。。。
//请参见下面的createLookup方法
映射设施=createLookup(
新授信(“授信1”),
新授信(“授信2”),
新授信(“授信3”),
新贷款(“贷款4”);
//打印姓名
对于(Facility:Facility.values()){
System.out.println(facility.getName());
}
//增值
设施=设施。获取(“设施3”);
facility.getValues().add(“bla”);
}
私有映射createLookup(设施..设施){
//使用TreeMap可以对键进行排序
映射查找=新建树映射();
用于(设施:设施){
lookup.put(facility.getName(),facility);
}
返回查找;
}
我无法填充它们,因为大小最初是未知的,它将根据用户填充为json字符串的值进行拾取。我只需要数组名,如“FacilityName”“RecApp”等@kingsmasher1,然后我强烈建议使用一个自定义对象,将大量的列表
作为属性,或者更糟糕但可以接受的是,如图所示使用一个映射。但在这种情况下,我需要初始化每个单独的列表,这会增加代码大小,我也不能有一个列表数组。类似于List facilityTableAttrs[]=新列表{List FacilityName,ListRecApp
在Java中是不允许的。您需要初始化添加对象的任何对象,无论是数组还是List
。您不能初始化List
本身,它是一个接口。您可能希望ArrayList
作为您的具体类。正如我已经说过的,您最好使用映射e> 不是列表[]。变量名称应以小写字符开头,因此“facilityName”而不是“facilityName”。此外,“String[][]facilityTableAttrs”比“String facilityTableAttrs[][]”更常见(这也是正确的)Java中不允许使用.Array os list。初始化每个属性将减少代码大小,这也是我希望使用数组的原因。Java中不允许使用类似于list facilityTableAttrs[]=new list{list FacilityName,ListRecApp
的内容
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;
}