和平在你身上:)。
说我有:
----------------------------
| Hellohowruimfindandu| 30 |
----------------------------
| asdjflkdsjfklajlkjlk| 25 |
----------------------------
| sdf8sd8f97asjdkfjldl| 33 |
----------------------------
| sdfajsdfklajsdlfkajd| 18 |
----------------------------
| dfjalsjfdaldjflsdjfl| 0 |
----------------------------
| Hellohowruimfindandu| 15 |
----------------------------
| aasdklfjaklsdjaksjdf| 13 |
----------------------------
| jdsflkajsdflasjdfljl| 19 |
在实际代码中,它就像:
String[] Str = new String[20];
Str[0] = "Hellohowruimfindandu"+"\u0003"+"30";
Str[1] = "asdjflkdsjfklajlkjlk"+"\u0003"+"25";
// And so on
现在我想根据它的数值对这个数组进行排序。说:
----------------------------
| dfjalsjfdaldjflsdjfl| 0 |
----------------------------
| aasdklfjaklsdjaksjdf| 13 |
----------------------------
| Hellohowruimfindandu| 15 |
等等;
答案 0 :(得分:1)
对于此类应用程序,更有效的方法是使类具有两个属性:String
和Integer
。现在列出这个类对象。您可以使用Comparator
类基于String(lexicographic)或Integer对此列表进行排序。
例如:
你的课应该是:
public class MyClass{
String s;
int value;
MyClass(String str, int v){
s = str;
value = v;
}
}
您可以按如下方式列出此课程:
ArrayList<MyClass> list = new ArrayList<>();
list.add(new MyClass("str1", val1));
list.add(new MyClass("str2", val2));
...
排序如下:
Collections.sort(list, (a, b) -> a.value < b.value ? -1 : a.value == b.value ? 0 : 1);
上面的代码只适用于Java8,因为它使用的是lambda表达式。请参阅以下没有lambda表达式的代码。
Collections.sort(list,new Comparator<MyClass>(){
@Override
public int compare(final MyClass a,MyClass b) {
//TODO return 1 if b should be before a
// return -1 if a should be before b
// return 0 otherwise
}
});
或者如@StutiRastogi所建议的那样,如果你不想改变你的结构,你需要解析整数,然后通过跟踪旧索引和新索引对它们进行排序,然后再根据索引对String进行排序。
答案 1 :(得分:0)
获取每个String元素的最后两个字符(如果您知道它只有2位数字),将它们解析为整数,对它们进行排序并存储索引值,然后使用该索引排序显示字符串。这是方法的概述,没有实际代码,所以你可以试一试。
如果您可以更改数组的存储方式,我可以建议使用带有String和整数的类作为成员。这样,您可以根据需要单独操作它们,并在需要时将它们连接起来。使用面向对象的方法,可以让您的生活更轻松。