简化java数组布局

时间:2016-04-18 18:07:13

标签: java arrays processing

有没有其他方法将此表应用于数组而不是创建其中的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行但是还有其他方法可以让它变得更简单吗?

4 个答案:

答案 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

简单直接。