如果我有以下ArrayList
:
["a 100", "b 32", "t 54", "u 1"]
(数组和字母在数组列表的每个单元格中用空格分隔)。
如何通过数字对数字进行排序,使每个数字与相应的字母保持一致?。
答案 0 :(得分:3)
这看起来像是在尝试使用字符串实现面向对象的编程。幸运的是,Java已经做到了这一点。
所以,做一些这样的事情:
public class MyClass implements Comparable<MyClass> {
private final String aString; //could be char perhaps..
private final Integer anInteger;
public MyClass(final String aString, final Integer anInteger) {
this.aString = aString;
this.anInteger = anInteger;
}
public String getAString() { return aString; }
public Integer getAnInteger() { return anInteger; }
public String toString() { return anInteger + " " + aString }
//comparison by number
public int compareTo(final MyClass other) {
return anInteger.compareTo(other.anInteger);
}
}
然后,你就这样使用它:
final List<MyClass> myClasses = new ArrayList<>();
myClasses.add(new MyClass("a", 100));
myClasses.add(new MyClass("b", 32));
myClasses.add(new MyClass("t", 54));
myClasses.add(new MyClass("u", 1));
Collections.sort(myClasses);
答案 1 :(得分:1)
使用自定义比较器对列表进行排序。
List<String> yourList = Arrays.asList("a 100", "b 32", "t 54", "u 1");
yourList.sort((entry1, entry2) -> {
int number1 = Integer.parseInt(entry1.split(" ")[1]);
int number2 = Integer.parseInt(entry2.split(" ")[1]);
return Integer.compare(number1, number2);
});
此致
答案 2 :(得分:1)
import static java.lang.Integer.*;
只需导入静态Integer
方法,您就可以获得最紧凑的Comparator<String>
。
(a, b) -> compare(valueOf(a.split(" ")[1]), valueOf(b.split(" ")[1]));
答案 3 :(得分:1)
假设列表中的元素是相同的模式:
然后你可以做
Great tool for healing your life--if you are ready to change your beliefs!<br /><a href="http
Bought this book for a friend. I read it years ago and it is one of those books you keep forever. Love it!
I read this book many years ago and have heard Louise Hay speak a couple of times. It is a valuable read...
答案 4 :(得分:1)
您可以像在常规数组中一样使用交换方法。唯一的区别是我们使用set(index, "value")
方法更新指定索引处的特定字符串。
public static void sort (ArrayList<String> arr){
int N = arr.size();
int E = N-1;
String temp;
boolean flag = true;
while(flag){
flag=false;
for(int a = 0 ; a < E ; a++){
if(Integer.parseInt(arr.get(a).substring(arr.get(a).indexOf(" ")+1)) >
Integer.parseInt(arr.get(a+1).substring(arr.get(a+1).indexOf(" ")+1))) {
temp=arr.get(a);
arr.set(a, arr.get(a+1));
arr.set(a+1, temp);
flag=true;
}
}
E--;
}}
排序算法是冒泡排序。由于简单,我使用过它。如果需要,您可以使用任何其他排序算法。
然后,您可以在main方法中调用sort()
函数:
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
arr.add("a 98");
arr.add("a 23");
arr.add("c 11");
sort(arr);
}
答案 5 :(得分:0)
在Java 8中,Comparator
有少数static
和default
方法,这些方法使创建自定义比较器变得容易。例如,您可以创建一个拆分每个字符串并将第二个单词转换为整数的代码。
list.sort(Comparator.comparingInt(
s -> Integer.parseInt(s.split(" ")[1])
));