java - 我如何解释这个java代码中的排序?

标签 java sorting arraylist

我真的很想得到一些帮助来解释这段代码。代码作者如何使用排序?结果是反向数字排序。

private void listbids() {
    List<Bid> bidl;

    String dogName = readString("Dog name:");
    Auction bidAuction = null;
    for (Auction auctions : auctionsList) {
        if (auctions.getDogName().toLowerCase().equals(dogName.toLowerCase())) {
            bidAuction = auctions;
            break;
        }
    }
    if (bidAuction != null) {
        bidl = bidAuction.getBidding();
        bidl.sort(Comparator.comparing(bid -> String.format("%08d", 999999999-bid.getAmount())));
        System.out.println("Bids:");
        for (Bid bid : bidl) {
            System.out.println("Amount: " + bid.getAmount() + " Bidder: " + bid.getUser().getName());
        }
    } else {
        System.out.println("Error: No bids registred yet for this auction");
    }
}

最佳答案

至少可以说,这是一种非常奇怪的比较数字的方式。 它的核心在这里:

String.format("%08d", 999999999-bid.getAmount())

比较是通过以下方式进行的:

  1. 按字典顺序而不是数字方式比较项目 (String.format)
  2. 使用 String 表示纯整数值(d 格式位)
  3. 0 填充这些整数值(0 格式位)...
  4. ...形成 8 位整数(8 格式位)
  5. 将原始值减去 999999999 后(假设 bid.getAmount() 值始终小于该值)

这可能可以用Comparator.comparingInt(这里的ToIntFunction转换bid.getAmount()返回的任何内容).reversed()来重构。

关于java - 我如何解释这个java代码中的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490975/

相关文章:

java - 操作 String 类型的数组列表

java - 将数字提高到分数幂java

java - 未能传递结果信息

java - 按姓氏和顺序对行进行排序

algorithm - 数基转换的时间复杂度

c# - 如何对 N 长度数组中的前 M 个元素进行排序?

android - 我的 onReceive 响应哪个请求?

java - 为什么for循环不继续

java - 多边形顶点作为 UV 坐标

java - 什么是NullPointerException,我该如何解决?