Collections.sort 未按预期对 ArrayList 进行排序 [beanshell,Java,JMeter]
Collections.sort not sorting ArrayList as expected [beanshell, Java, JMeter]
我在 Beanshell 处理器 (JMeter) 中使用了一些 Java 代码。此 java 代码简单有效。它应该简单地对数字数组列表进行排序,但它给出了奇怪的行为:
// Input data is like below:
student_id_RegEx_1=13
student_id_RegEx_11=4
student_id_RegEx_12=23
student_id_RegEx_13=24
// CREATE ARRAY LIST AND STORE ELEMENTS IN IT
ArrayList strList = new ArrayList();
for (int i=0;i<25; i++){
strList.add(vars.get("student_id_RegEx_" + String.valueOf(i+1)));
}
// Print the ArrayList created by above method [output is]
vars.putObject("ArrayListBeforeSorting",strList);
ArrayListBeforeSorting=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 4, 23, 24, 25, 26, 27, 28, 29, 5, 6, 7, 8, 9, 10, 11]
// Sort the ArrayList
Collections.sort(strList);
//Print the sorted ArrayList [below is output]
vars.putObject("ArrayListAfterSorting",strList);
ArrayListAfterSorting=[10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 4, 5, 6, 7, 8, 9]
观察 sortedArrayList 末尾的 28, 29, 4, 5, 6, 7, 8, 9, 10, 11。我期待 4、5、6、7、8、9、10、11、12 等等 我无法理解这种奇怪行为背后的原因。可能是因为 'array input data' 有问题吗? Collections.sort 似乎工作正常;当我自己创建一个示例数组列表时。对此行为和解决方案的任何评论将不胜感激。谢谢
不保存字符串类型的值,而是将它们保存为数字:
String strValue = vars.get("student_id_RegEx_" + String.valueOf(i+1));
strList.add(Integer.parseInt(strValue));
按字符串排序通过逐个比较每个字符来工作,例如:
2 4 5
| | | |
2 2 3 3
2 = 2
4 > 2 - therefore, "245" is "bigger" than "2233"
我在 Beanshell 处理器 (JMeter) 中使用了一些 Java 代码。此 java 代码简单有效。它应该简单地对数字数组列表进行排序,但它给出了奇怪的行为:
// Input data is like below:
student_id_RegEx_1=13
student_id_RegEx_11=4
student_id_RegEx_12=23
student_id_RegEx_13=24
// CREATE ARRAY LIST AND STORE ELEMENTS IN IT
ArrayList strList = new ArrayList();
for (int i=0;i<25; i++){
strList.add(vars.get("student_id_RegEx_" + String.valueOf(i+1)));
}
// Print the ArrayList created by above method [output is]
vars.putObject("ArrayListBeforeSorting",strList);
ArrayListBeforeSorting=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 4, 23, 24, 25, 26, 27, 28, 29, 5, 6, 7, 8, 9, 10, 11]
// Sort the ArrayList
Collections.sort(strList);
//Print the sorted ArrayList [below is output]
vars.putObject("ArrayListAfterSorting",strList);
ArrayListAfterSorting=[10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 4, 5, 6, 7, 8, 9]
观察 sortedArrayList 末尾的 28, 29, 4, 5, 6, 7, 8, 9, 10, 11。我期待 4、5、6、7、8、9、10、11、12 等等 我无法理解这种奇怪行为背后的原因。可能是因为 'array input data' 有问题吗? Collections.sort 似乎工作正常;当我自己创建一个示例数组列表时。对此行为和解决方案的任何评论将不胜感激。谢谢
不保存字符串类型的值,而是将它们保存为数字:
String strValue = vars.get("student_id_RegEx_" + String.valueOf(i+1));
strList.add(Integer.parseInt(strValue));
按字符串排序通过逐个比较每个字符来工作,例如:
2 4 5
| | | |
2 2 3 3
2 = 2
4 > 2 - therefore, "245" is "bigger" than "2233"