使用主键对2D数组进行排序

时间:2016-04-12 19:00:14

标签: java arrays collections

我正在尝试拆分文本文件的每一行并插入数组列表。

aa 04 cc ff gg rrr
aa 01 bb dd ee fff
aa 03 ff hh ee ttt
aa 05 dd ss ww ccc

1,如何将数字存储为整数,其余为数组列表中的字符串。 (使用当前代码抛出数字格式错误)。

2,当我使用Java集合插入数组时,是否可以基于整数进行排序?

到目前为止,我有,

List <Object> records = new ArrayList<Object>();
        bf = new BufferedReader(new FileReader(getFile()));
        String readLine;        

        while ((readLine = bf.readLine()) != null) {
            try {
                    List <Object> record = new ArrayList<Object>();

                    record.add(readLine.substring(flg_start, num_start).trim());
                    record.add(Integer.parseInt(readLine.substring(num_start-1, fld_start-1).trim())); // converting string to int and saving to record list, throwing Number Format Error.

让我再说一遍我的问题, 如何将记录[1]设置为整数并将其作为字符串? 我在添加到数组时可以用什么集合框架进行排序? 我希望我的数组中的最终结果是一个大约1M记录的排序列表

aa 01 bb dd ee fff
aa 03 ff hh ee ttt
aa 04 cc ff gg rrr
aa 05 dd ss ww ccc

2 个答案:

答案 0 :(得分:1)

至于数据结构,您需要TreeMap Integer个密钥和List值。您应该读取该文件并将每行解析为@HaridwarJha描述,并为每一行添加新值,其中包含由解析值组成的已分析Integer键和List值。使用TreeMap,您的数据将按键排序,即来自您文件的Integer值。

Map<Integer, List<Object>> map = new TreeMap<Integer, List<Object>>();
while((line=reader.readLine())!=null){
    List<Object> row = new ArrayList<>();
    String[] strArray=line.split(" ");
    row.add(strArray[0]);
    row.add(strArray[1]);
    row.add(strArray[2]);
    row.add(strArray[3]);
    row.add(strArray[4]);
    row.add(strArray[5]);
    map.put(new Integer(row.get(1)), row);
}

答案 1 :(得分:0)

您可以这样做并访问strArray,您可以使用for循环或可以使用正则表达式[0 ... 1]进行解析.... 这是一个简单的...试试吧 public static void main(String [] args){         列表记录= new ArrayList();

    File file=new File("File Location");
    try {
        BufferedReader reader=new BufferedReader(new FileReader(file));
        String line;
        while((line=reader.readLine())!=null){
            String[] strArray=line.split(" ");
            records.add(new Integer(strArray[1]));
            records.add(new String(strArray[0]));
            records.add(new String(strArray[2]));
            records.add(new String(strArray[3]));
            records.add(new String(strArray[4]));
            records.add(new String(strArray[5]));
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    for(Object tmp:records){
        System.out.println(tmp);
    }
}