簡體   English   中英

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]

觀察28,29,4,5,6,7,8,9,10,11在sortedArrayList結束。 我原本期望4、5、6、7、8、9、10、11、12 等,但我無法理解這種奇怪行為的原因。 可能是因為“數組輸入數據”存在問題嗎? Collections.sort似乎工作正常; 當我自己創建一個示例arraylist時。 任何對此行為和解決方案的評論將不勝感激。 謝謝。

與其保存字符串類型的值,不如將它們另存為數字:

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM