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