【发布时间】:2018-06-19 08:35:25
【问题描述】:
我有绳子。 BOM结果:
1|00022954|41.418\n 2|00022951|1.0\n 3|00022945|41.575\n 3|00022944|41.684\n 3|00022944|41.778\n 3|00022944|41.871\n 3|00022946|42.918\n 3|00022944|41.918\n 3|00022944|41.825\n 3|00022944|41.731\n 3|00022945|41.621\n 3|00022953|41.512\n 4|00022957|0.0\n 5|00022947|42.809\n 5|00022942|42.918\n 5|00022948|43.918\n 5|00022947|42.871\n 5|00022950|42.746\n 4|00022952|1.0\n 5|00022941|41.246\n 5|00020472|41.184\n 2|00022958|0.0\n 3|00022945|39.621\n 3|00022944|39.731\n 3|00022944|39.84 \n 3|00022944|39.949\n 3|00022944|39.887\n 3|00022944|39.793\n 3|00022945|39.684\n 3|00022956|39.512\n 4|00022959|1.0\n 5|00022941|40.762\n 5|00022943|40.699\n 4|00022957|0.0\n 5|00022947|42.809\n 5|00022942|42.918\n 5|00022948|43.918\n 5|00022947|42.871\n 5|00022950|42.746\n 3|00022949|40.996\n 3|00022944|39.996\n
当竖线(|)被分隔时,
第一个字符串是级别。
最后一个字符串是排序的基础。
如果级别相等,则对字符串进行排序。
List<String> rowList = Arrays.asList(BOMResult.split("\n"));
Collections.sort(rowList, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String array1[] = s1.split("\\|");
String array2[] = s2.split("\\|");
int i1 = Integer.parseInt(array1[0]);
int i2 = Integer.parseInt(array2[0]);
if (i1 == i2) {
return Double.valueOf(array1[array1.length-1]).compareTo(Double.valueOf(array2[array2.length-1]));
} else {
return 0;
}
}
});
BOMResult = String.join("\n", rowList);
当前结果:
1|00022954|41.418
2|00022951|1.0
3|00022953|41.512
3|00022945|41.575
3|00022945|41.621
3|00022944|41.684
3|00022944|41.731
3|00022944|41.778
3|00022944|41.825
3|00022944|41.871
3|00022944|41.918
3|00022946|42.918
4|00022957|0.0
5|00020472|41.184
5|00022941|41.246
5|00022950|42.746
5|00022947|42.809
5|00022947|42.871
5|00022942|42.918
5|00022948|43.918
4|00022952|1.0
2|00022958|0.0
3|00022956|39.512
3|00022945|39.621
3|00022945|39.684
3|00022944|39.731
3|00022944|39.793
3|00022944|39.84
3|00022944|39.887
3|00022944|39.949
4|00022957|0.0
4|00022959|1.0
5|00022943|40.699
5|00022941|40.762
5|00022950|42.746
5|00022947|42.809
5|00022947|42.871
5|00022942|42.918
5|00022948|43.918
3|00022944|39.996
3|00022949|40.996
我想在同一级别排序,即使行不同。
预期结果:
1|00022954|41.418
2|00022958|0.0
3|00022956|39.512
3|00022945|39.621
3|00022945|39.684
3|00022944|39.731
3|00022944|39.793
3|00022944|39.84
3|00022944|39.887
3|00022944|39.949
4|00022957|0.0
4|00022959|1.0
5|00022943|40.699
5|00022941|40.762
5|00022950|42.746
5|00022947|42.809
5|00022947|42.871
5|00022942|42.918
5|00022948|43.918
3|00022944|39.996
3|00022949|40.996
2|00022951|1.0
3|00022953|41.512
3|00022945|41.575
3|00022945|41.621
3|00022944|41.684
3|00022944|41.731
3|00022944|41.778
3|00022944|41.825
3|00022944|41.871
3|00022944|41.918
3|00022946|42.918
4|00022957|0.0
5|00020472|41.184
5|00022941|41.246
5|00022950|42.746
5|00022947|42.809
5|00022947|42.871
5|00022942|42.918
5|00022948|43.918
4|00022952|1.0
【问题讨论】:
-
抱歉,您的预期结果没有以任何方式排序?你的排序标准是什么?
-
@DiabolicWords 对不起,我修改了预期的结果。我想做的就是在同一级别排序,即使在不同的行。 0.0 应该在同一级别的 0.1 之前。 (1|00022954|41.418, 2|00022958|0.0, 3|00022956|39.512, ..., 2|00022951|1.0, 3|00022953|41.512 ...) 谢谢。
标签: java sorting compare comparator