Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据特定标记使用Arraylist对文件进行排序?_Java_Sorting_Oop_Arraylist - Fatal编程技术网

Java 如何根据特定标记使用Arraylist对文件进行排序?

Java 如何根据特定标记使用Arraylist对文件进行排序?,java,sorting,oop,arraylist,Java,Sorting,Oop,Arraylist,我有一个文件,里面有一些关于门票发行的信息,看起来是这样的 Test Passenger Aegean Business 06:00 Athens-London 650.92 E1 T9759 09/06/2021 12:45:22 Test Passenger RyanAir Economy 10:30 Athens-London 200.65 E2 T9946 09/06/2021 12:45:30 Test Passeng

我有一个文件,里面有一些关于门票发行的信息,看起来是这样的

Test Passenger  Aegean      Business    06:00   Athens-London   650.92  E1  T9759   09/06/2021 12:45:22
Test Passenger  RyanAir     Economy     10:30   Athens-London   200.65  E2  T9946   09/06/2021 12:45:30
Test Passenger  Lufthansa   Business    12:30   Athens-London   700.50  E3  T8189   09/06/2021 12:45:37
这些属性是
passengerName
Company
ticketClass
departureTime
itegenerary
ticketCost
ticketId
issueDate
,它们用“\t”作为
分隔符来分隔。
文件中的每个输入都是一个
字符串
。文件被加载到
Arraylist
中,我试图根据票款对其进行排序。我要做的是将arraylist拆分为标记,以便从每个arraylist中获得正确的比较结果,但它似乎不起作用。此外,我还尝试实现了我找到的所有
Collections.sort()
示例,但仍然没有任何效果。对文件进行排序所需的结果,以便我可以在
JTextArea
中显示它。文件的每个字段都是一个字符串,是
票证类的属性,ArrayList的类型是票证(
ArrayList=new ArrayList();
)。这是我到目前为止所拥有的

private void loadFromFile(String fileName) {
     
    ArrayList<Ticket> ticketsList = new ArrayList();

    try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
        
        String line = "";
        String[] tokens;
        Ticket ticket = new Ticket();
        
        float totalTicketCost = (float) 0.00;
        int numberOfLines = 0;

        while(reader.ready()){
            line = reader.readLine();

            tokens = line.split("\t");

            if (tokens.length == 9) {

                ticket = new Ticket(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5],tokens[6], tokens[7], tokens[8]);
                ticketsList.add(ticket);
            }

            area.append(ticket.toString());

            totalTicketCost += Float.parseFloat(tokens[5]);
                
            // format dacimals for total cost
            DecimalFormat df = new DecimalFormat();
            df.setMaximumFractionDigits(2);

            numberOfTickets.setText(String.valueOf(numberOfLines));
            totalCost.setText(String.valueOf(df.format(totalTicketCost)));

            numberOfLines++; //Total number of tickets
            
        }
        
        // Since nothing works let's try the C way of finding the the biggest ticketCost
        float tmp = Float.valueOf(ticketsList.get(0).getTicketPrice());
        float max = Float.valueOf(ticketsList.get(0).getTicketPrice());
          
        for( int i = 0; i < ticketsList.size(); i++){
            
            tmp = Float.valueOf(ticketsList.get(i).getTicketPrice());
            
            if( max < tmp ){
                max = tmp;
               // currentBig = Float.valueOf(ticketsList.get(i+1).getTicketPrice());
            }    
            System.out.println(tmp + "\n");
        }
        
    } catch (Exception e) {
    }
}  
private void loadFromFile(字符串文件名){
ArrayList ticketsList=新建ArrayList();
try(BufferedReader=new BufferedReader(new FileReader(fileName))){
字符串行=”;
字符串[]标记;
票证=新票证();
浮动总票面成本=(浮动)0.00;
int numberOfLines=0;
while(reader.ready()){
line=reader.readLine();
令牌=行分割(“\t”);
if(tokens.length==9){
票证=新票证(令牌[0]、令牌[1]、令牌[2]、令牌[3]、令牌[4]、令牌[5]、令牌[6]、令牌[7]、令牌[8]);
票务列表。添加(票务);
}
area.append(ticket.toString());
totalTicketCost+=Float.parseFloat(令牌[5]);
//设置总成本的dacimals格式
DecimalFormat df=新的DecimalFormat();
df.setMaximumFractionDigits(2);
numberOfTickets.setText(String.valueOf(numberOfLines));
totalCost.setText(String.valueOf(df.format(totalTicketCost));
numberOfLines++;//总票数
}
//既然什么都不管用,让我们试试C方式来找到最大的票务成本
float tmp=float.valueOf(ticketsList.get(0.getTicketPrice());
float max=float.valueOf(ticketsList.get(0.getTicketPrice());
对于(int i=0;i
您可以使用排序方法()对列表中的对象进行排序。要比较它们,可以使用“Comparator”类():

第一个数字表示票证添加到列表中的顺序(例如,A-票证先添加,D-票证后添加)。请注意,通过添加
,您还可以使用此方法按多个令牌进行排序。然后比较(Ticket::getId)
,因此,如果两张票据具有相同的名称,则可以按id对其进行排序。添加此项后,排序行变为:

dummies.sort(
           Comparator.comparing(Ticket::getName)
                    .thenComparing(Ticket::getId)
    );
以及输出:

0   A-ticket    Economy 
2   B-ticket    Economy 
3   C-ticket    Business    
4   C-ticket    Business    
1   D-ticket    Business
(注意两张C-ticket的顺序是如何变化的)

dummies.sort(
           Comparator.comparing(Ticket::getName)
                    .thenComparing(Ticket::getId)
    );
0   A-ticket    Economy 
2   B-ticket    Economy 
3   C-ticket    Business    
4   C-ticket    Business    
1   D-ticket    Business