这里有一些基本代码可以帮助您入门。这使用了对条目进行排序的 TreeMap。阅读HashMap上的简介以了解原因,它指定 HashMap 保证不对条目进行排序。可以为此使用 HashMap,但我不推荐它,因为您可能需要在某处进行额外的步骤。
TreeMap<Integer, ArrayList<Integer[]>> rowMap = new TreeMap<Integer, ArrayList<Integer[]>>();
// when you have your new line
String[] cols = sCurrentLine.split(" ");
if (cols.length < 1) {
// handle error if there is not a key column
}
try {
int colKey = Integer.parseInt(cols[0]);
Integer[] colValues = new Integer[cols.length - 1];
for (int i = 1; i < cols.length; i++) {
colValues[i - 1] = Integer.parseInt(cols[i]);
}
if (!rowMap.containsKey(colKey)) {
// add a new entry for this column number
rowMap.put(colKey, new ArrayList<Integer[]>());
}
rowMap.get(colKey).add(colValues);
} catch (NumberFormatException e) {
// handle error if any columns don't have integers
}
现在您拥有的是一个 TreeMap,其中包含按第 1 列中的数字分组的所有行的列表。
对于要打印整个地图的示例文档,您可以执行以下操作:
// iterate by column 1 number in numerical order
for (Integer key : rowMap.keySet()) {
// iterate by rows in this column in the order they were added
for (Integer[] row : rowMap.get(key)) {
String printout = key + ":";
// iterate by columns in this row
for (Integer col : row) {
printout += " " + col;
}
System.out.println(printout);
}
}
这将输出以下内容:
1: 23 1
1: 24 2
1: 57 1
1: 10 1
1: 59 2
1: 31 2
1: 38 1
1: 11 1
2: 39 2
2: 40 1
2: 15 1
2: 74 2
因此,您可以看到这是根据第 1 列中的值对文档进行排序的。您还可以按照在 OP 中显示的格式打印它们,您只需稍微更改循环,以便将行添加到同一行。
关于以这种方式使用 TreeMap 的一些注意事项:
- 第 1 列中的数字可以是任何整数。
- 第 1 列中的数字可以按任意顺序排列。
- 这些行可以具有除第一列之外的任意数量的列。
但是,当您使用地图列出它们时,它们将始终按第 1 列数字分组,并且始终按数字排序。
如果您不关心保持行排序以及在这种情况下您可以制作 a 或什至 a 如果您所做的只是连接每一行,它可能会TreeMap<Integer, ArrayList<Integer>>
有所TreeMap<Integer, ArrayList<String>>
简化TreeMap<Integer, String>
。