按第一个单词

时间:2018-01-29 12:49:31

标签: java arrays sorting arraylist

因此,我已将一个哈希表读入ArrayList以进行排序。 我有很多数字值后跟空格,然后是另一个数字,表示从文本文件中找到它的位置。所以我的未排序数组看起来像这样:

10 1
11 7
1 12
47 9
等等。 如果我按Collection.sort()排序;我的数组看起来像这样:
10 1
1 7
11 12
47 9
所以它按字母顺序比较,而不是数字。我想要的是忽略第二个数字并按照第一个单词对列表进行排序。

public void xor(arrayObject[] array){
    try{

    FileWriter textWriter = new FileWriter(new File("xor.txt"));
    ArrayList<String> temp = new ArrayList<>();
    String tempString;

    for(int i = 0; i < array.length; i++){

        if(array[i] != null){
            tempString ="";
            int hash = hashFunction(i);
            int length = String.valueOf(array[hash].value).length();
            if(array[hash].foundFromA && !array[hash].foundFromB){

                tempString += Integer.toString(array[hash].value);
               for(int a = 0; a < 10-length; a++){

                 tempString += " ";
                }
                tempString += "1";
                temp.add(tempString);

            }
            else if(!array[hash].foundFromA && array[hash].foundFromB){

                tempString += Integer.toString(array[hash].value);

                for(int a = 0; a < 10-length; a++){
                 tempString += " ";
                }

                tempString += "2";
                temp.add(tempString);
            }

        }
    }
    Collections.sort(temp);

    for(String s : temp){
        textWriter.write(s);
        textWriter.write(System.lineSeparator());
    }
    textWriter.close();
     System.out.println("Writing xor file succesful");
    }
    catch(IOException e){
        System.out.println("Failed to save file");
    }
}

2 个答案:

答案 0 :(得分:1)

你可以创建一个比较器类并在sort方法中使用它

public class MyComparator implements java.util.Comparator<String> {

    public int compare(String s1, String s2) {
        return Integer.parseInt(s1.split( " " )[0]) - Integer.parseInt( s2.split( " " )[0] );
    }
}

像这样使用

Collections.sort(temp, new myComparator());

答案 1 :(得分:1)

正如Abdou所说,您可以使用Comparator,但您可以直接将其传递给sort方法,而不是创建一个单独的类,这更容易使用。

import java.util.*;

public class HelloWorld {
  public static void main(String[] args) {
    ArrayList<String> myList = new ArrayList<>();

    myList.add("10 1");
    myList.add("11 7");
    myList.add("1 12");
    myList.add("47 9");
    myList.add("110 9");

    Collections.sort(myList, new Comparator<String>() {
      public int compare(String a, String b) {
        int n1 = Integer.parseInt(a.split(" ")[0]);
        int n2 = Integer.parseInt(b.split(" ")[0]);

        return n1 - n2;
      } 
    });

    for (String item : myList) {
      System.out.println(item);
    }
  }
}

虽然我会为值创建一个类,但让这个类实现Comparable接口。它会更干净,sort方法可以开箱即用。