有没有其他方法将此表应用于数组而不是创建其中的31个?
布局如下:
STATE_NAME |一年| crimetype1 | crimetype2 |地方|统计|
row1:state1 | 2001 |谋杀|刀|主页| 5 |
row2:state1 | 2001 |谋杀| ax | home | 2 |
row3:state2 | 2001 | robbery | baseball | shop | 1 |
以及31种不同的状态。
我想为每个状态创建31个数组,有5行但是还有其他方法可以让它变得更简单吗?
答案 0 :(得分:1)
简单地说:对象。这样,您就不必拥有嵌套数组。
上课:
EXT_shader_framebuffer_fetch
除此之外,我不认为你应该再合并31个值 - 它们是31个独立的,独立的出现。
答案 1 :(得分:0)
首先,创建一个Crime
对象,该对象可以表示该集合中的单个行。让我们根据国家自然地与自己进行比较。
public class Crime implements Comparable<Crime> {
private String state;
private Year year;
private String crimeType1;
private String crimeType2;
private String place;
private int count;
public int compareTo(Crime other) {
return state.compareTo(other.state);
}
}
我把这个物体的构造留作读者练习。
接下来,您需要将该值的结果添加到列表中。
List<Crime> crimes = new ArrayList<>();
// In a loop reading the file
crimes.add(crime);
此时你的工作已基本完成;如果您想通过特定状态获取犯罪,可以使用Stream API根据此进行过滤。
答案 2 :(得分:0)
最好按如下方式创建类Crime getHeader()返回标头,getRow将返回该行。 (或toString)
public class Crime {
String stateName;
String year;
//...
public static String getHeader(){
//you can improve this
return "state_name|year|crimetype1|crimetype2|place|count|";
}
public String getRow(){
return stateName + "|" + year +"|" ...
}
public static void main(String[] args) {
List<Crime> state = new ArrayList<>(31);
//or
List<Crime> state = Arrays.asList(new Crime[] {
new Crime("ST","2004",..),...
});
}
}
答案 3 :(得分:0)
正如KevinO指出的那样,如果您正在编写OO语言,那么以OO方式思考就更好了,否则没有必要使用java
。
使用除状态之外的所有值创建一个Crime
类,然后创建一个Map
Map<String,ArrayList<Crime>> multiMap = new HashMap<String,ArrayList<Crime>>();
这里String
是州名,而ArrayList
是该州所有罪行的所有罪行,所以最后将有30个键(这里我们使用状态作为唯一键)muliMap {{ 1}}。
所以稍后你不需要过滤状态犯罪,你需要做的就是
Object
简单直接。