You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ArrayList根据指定token对票务文件排序并在JTextArea展示

解决方案

现有代码问题说明

  • 你在读取文件的循环中就直接调用area.append(ticket.toString()),此时所有票务还未完成加载和排序,输出的自然是未排序的内容
  • 空的catch (Exception e)块会吃掉所有报错,导致你看不到数组越界、格式转换异常等问题,不利于调试
  • 你写的遍历找最大值的逻辑只能拿到最高票价,无法完成全列表排序

正确实现步骤

1. 排序逻辑实现

你可以直接用Collections.sort()配合自定义比较器实现按票价排序,这里需要注意将存储为String类型的票价转为数值类型比较:
如果是Java 8及以上版本,用lambda写法最简单:

// 按票价升序排序(如果要降序就把o1和o2的位置反过来)
Collections.sort(ticketsList, (o1, o2) -> {
    Float price1 = Float.parseFloat(o1.getTicketPrice());
    Float price2 = Float.parseFloat(o2.getTicketPrice());
    return price1.compareTo(price2);
});

如果是Java 8以下版本,用匿名内部类写法:

Collections.sort(ticketsList, new Comparator<Ticket>() {
    @Override
    public int compare(Ticket o1, Ticket o2) {
        Float price1 = Float.parseFloat(o1.getTicketPrice());
        Float price2 = Float.parseFloat(o2.getTicketPrice());
        return price1.compareTo(price2);
    }
});

注意:如果对金额精度要求高,建议把票价字段存为BigDecimal类型,避免Float的浮点精度丢失问题,比较时用BigDecimal.compareTo()即可。

2. 将排序后内容输出到JTextArea

排序完成后,先清空原有内容,再遍历排序后的列表逐行追加:

// 清空JTextArea原有内容
area.setText("");
// 遍历排序后的列表输出
for (Ticket t : ticketsList) {
    area.append(t.toString() + "\n");
}

3. 修正后的完整方法参考

private void loadFromFile(String fileName) {
    ArrayList<Ticket> ticketsList = new ArrayList<>();
    float totalTicketCost = 0.00f;
    int numberOfLines = 0;
    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(2);

    try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
        String line;
        String[] tokens;
        // 推荐用readLine() != null判断读取结束,比ready()更可靠
        while ((line = reader.readLine()) != null) {
            tokens = line.split("\t");
            if (tokens.length == 9) {
                Ticket ticket = new Ticket(tokens[0], tokens[1], tokens[2], tokens[3], tokens[4], tokens[5],tokens[6], tokens[7], tokens[8]);
                ticketsList.add(ticket);
                totalTicketCost += Float.parseFloat(tokens[5]);
                numberOfLines++;
            }
        }
        // 统计值赋值
        numberOfTickets.setText(String.valueOf(numberOfLines));
        totalCost.setText(df.format(totalTicketCost));
        
        // 排序逻辑
        Collections.sort(ticketsList, (o1, o2) -> {
            Float price1 = Float.parseFloat(o1.getTicketPrice());
            Float price2 = Float.parseFloat(o2.getTicketPrice());
            return price1.compareTo(price2);
        });
        
        // 输出排序后内容到JTextArea
        area.setText("");
        for (Ticket ticket : ticketsList) {
            area.append(ticket.toString() + "\n");
        }

    } catch (Exception e) {
        // 不要留空catch块,至少打印异常方便调试
        e.printStackTrace();
    }
}

内容的提问来源于stack exchange,提问作者Jonathan Baxevanidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 12:36:01