将自定义排序顺序应用于数组的最有效方法

时间:2015-07-28 21:46:02

标签: java arrays sorting

我有一个类似于:

的字符串数组
[module-src1, module-src2, module-src3, ..., source1, source2, source3, ...] 

我想将此数组重新排序为:

[source1, source2, source3, ..., module-src1, module-src2, module-src3, ...]

在Java中执行此操作的最有效方法是什么?

我考虑过有2个队列来存储每个队列,但这看起来过于复杂,我希望看看是否有更有效的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

我能想到的最好方法就是拥有自己喜欢的课程

public class Source implements Comparable<Source> {
    private String name;
    public Source(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    @Override
    public String toString(){
        return name;
    }

    @Override
    public int compareTo(Source another) {
        //do whatever sorting you want here
        //for example:
        if(name.subString(0,5).equalsIgnoreCase("module") &&
                another.getName().subString(0,5).equalsIgnoreCase("module"){
            //both start with module, so alphabetize
            return name.compareTo(another.getName());
        } else if(name.subString(0,5).equalsIgnoreCase("module") &&
                !another.getName().subString(0,5).equalsIgnoreCase("module"){
            //only this one starts with "module", the other one comes first
             return -1;
        }
        ...
    }
}
希望你能得到这个要点。

ArrayList或其他内容中拥有所有这些对象后,只需执行Collections.sort(myArray),然后按照您想要的顺序对其进行排序

答案 1 :(得分:0)

您必须对输入做出一些假设(也就是说,您必须假设数组中的所有字符串都被格式化为“module - ” - 或“source”-prefixed)。如果是这种情况,那么你可以这样做:

<form action= "handle_reg.php" method= "post">

<p>First Name: <input type= "text" name= "first_name" size= "20" /></p>
<p>Last Name: <input type= "text" name= "last_name" size= "20" /></p>
<p>Email address: <input type= "text" name= "email" size= "20" /></p>
<p>Password: <input type= "password" name= "password" size= "20" /></p>
<p>Please confirm your password: <input type= "password" name= "confirm" size= "20" /></p>
<p>Favourite color: <input type= "text" name= "color" size= "5" /></p>

<!--Script continues but these are the lines which mattered-->

答案 2 :(得分:0)

如果要保留具有最少行代码的String数组:

List<String> myList = new ArrayList<>(Arrays.asList(myArray))
Collections.sort(myList);
myArray = myList.toArray(new String[0]);

我建议使用List而不是数组,这会将其归结为一行代码:

Collections.sort(myList);