排序包含字符串和整数的数组列表

时间:2016-04-16 19:07:26

标签: java sorting arraylist

如果我有以下ArrayList

["a 100", "b 32", "t 54", "u 1"](数组和字母在数组列表的每个单元格中用空格分隔)。

如何通过数字对数字进行排序,使每个数字与相应的字母保持一致?。

6 个答案:

答案 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有少数staticdefault方法,这些方法使创建自定义比较器变得容易。例如,您可以创建一个拆分每个字符串并将第二个单词转换为整数的代码。

list.sort(Comparator.comparingInt(
    s -> Integer.parseInt(s.split(" ")[1])
));