Sorting 排序Arraylist Java

Sorting 排序Arraylist Java,sorting,arraylist,Sorting,Arraylist,我将一个txt文件放入数组中。txt文件中的数据格式如下: Order # Date Name City State Zip Code Transaction Amount 在一行中,每个项目表示一列 然后还有1000多行,上面都填上了答案。我想按交易金额排序 这是我的密码: import java.io.FileNotFoundException; import java.io.FileReader; import java.util.ArrayL

我将一个txt文件放入数组中。txt文件中的数据格式如下:

Order #     Date     Name     City     State    Zip Code    Transaction Amount
在一行中,每个项目表示一列

然后还有1000多行,上面都填上了答案。我想按交易金额排序

这是我的密码:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Rewards {

public static void main(String[] args) throws FileNotFoundException {

    String fileName = ("test.txt");
    FileReader fin = new FileReader("C:/Users/Jordan/Desktop/Project5Text.txt");
    Scanner src = new Scanner(fin);
    ArrayList<String> lines = new ArrayList<String>();
    src.useDelimiter(":");

    Random rand = new Random();

    while (src.hasNext()) {
        String l = src.nextLine();
        if (!l.equals(""))
            lines.add(l);
    }
    String[] randomChoices = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices[i] = randomString;
    }

    for (String s : randomChoices)
        System.out.println("Random Winner for $20 gift card is:       " +s);

    String[] randomChoices1 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices1.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices1[i] = randomString;
    }

    for (String s : randomChoices1)
        System.out.println("Random Winner for $40 gift card is:       " +s);

    String[] randomChoices2 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices2.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices2[i] = randomString;
    }

    for (String s : randomChoices2)
        System.out.println("Random Winner for $60 gift card is:       " +s);

    String[] randomChoices3 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices3.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices3[i] = randomString;
    }

    for (String s : randomChoices3)
        System.out.println("Random Winner for $80 gift card is:       " +s);

    String[] randomChoices4 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices4.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices4[i] = randomString;
    }

    for (String s : randomChoices4)
        System.out.println("Random Winner for $100 gift card is:      " +s);

}
}
import java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.Random;
导入java.util.Scanner;
公共班级奖励{
公共静态void main(字符串[]args)引发FileNotFoundException{
字符串文件名=(“test.txt”);
FileReader fin=新的FileReader(“C:/Users/Jordan/Desktop/Project5Text.txt”);
扫描仪src=新扫描仪(fin);
ArrayList行=新的ArrayList();
src.useDelimiter(“:”);
Random rand=新的Random();
while(src.hasNext()){
字符串l=src.nextLine();
如果(!l.equals(“”)
行。添加(l);
}
String[]randomChoices=新字符串[1];//随机选择数
for(int i=0;i
这是我正在使用的一些文本文件

订单#日期姓名中间首字母姓氏地址城市州邮政编码电子邮件交易金额

1 8/26/2012克里斯蒂娜H钟加利福尼亚州曼西马丁大道947号46489khchung@business.com593美元

2 2012年11月16日达拉斯大道15号Paige H Chen HI 47281phchen@business.com516美元

3 2012年11月10日雪莉·梅尔顿华盛顿大道808号巴西CA 47880semelton@business.com80美元

4 9/20/2012格雷琴一世希尔56华盛顿亚特兰大博士佛罗里达47215gihill@business.com989美元

5 2012年3月11日克伦U普克特652枫木Ct。巴西FL 46627kupuckett@business.com826美元


2012年7月6日乔治亚州拉斐特大道679号帕特里克·奥松47161posong@business.com$652执行此操作的一种方法是创建一个可以表示文件中一行的类。在这个类中,每个列都有字段。让这个类实现可比较的接口。这迫使您实现compareTo()方法


完成此操作后,只需使用该类创建一个ArrayList,并使用内置的sort()方法对其进行排序

我建议您首先创建一个以逻辑方式存储行的类:

class Transaction{
    String date;
    String name;
    String address;
    int amount;
    // etc...
}
然后,您可以将每个事务存储在一个列表中,并编写一个自定义比较器:

List<Transaction> transactions = new ArrayList<Transaction>();
...
Collections.sort(transactions, new Comparator<Transaction>(){
    public int compare(Transaction t1, Transaction t2){
        return Double.compare(t1.amount, t2.amount);
    }
});
List transactions=new ArrayList();
...
Collections.sort(事务,新比较器(){
公共整数比较(事务t1、事务t2){
返回Double.compare(t1.amount,t2.amount);
}
});
如果您需要一个简单(但不是最高效率)的解决方案,您可以:

    lines.sort(new Comparator<String>() {

        public double dollar(String line) {
            String[] parts = line.split(" ");
            // take the last element and remove its first character ($)
            return Double.parseDouble(parts[parts.length - 1].substring(1));
        }
        @Override
        public int compare(String o1, String o2) {
            // swap o1 and o2 if you need to sort in the opposite order
            return Double.compare(dollar(o1), dollar(o2));
        }
    });
lines.sort(新的比较器(){
公共双美元(字符串行){
String[]parts=line.split(“”);
//获取最后一个元素并删除其第一个字符($)
返回Double.parseDouble(parts[parts.length-1].substring(1));
}
@凌驾
公共整数比较(字符串o1、字符串o2){
//如果需要按相反顺序排序,请交换o1和o2
返回双精度。比较(美元(o1),美元(o2));
}
});