如何解释此java代码中的排序?

如何解释此java代码中的排序?,java,sorting,arraylist,Java,Sorting,Arraylist,我真的很想得到一些帮助来解释这段代码。代码编写者是如何使用排序的?结果是反向数字排序 private void listbids() { List<Bid> bidl; String dogName = readString("Dog name:"); Auction bidAuction = null; for (Auction auctions : auctionsList) { if (auctions.getDogName()

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

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");
    }
}

排序在这一行:

bidl.sort(Comparator.comparing(bid -> String.format("%08d", 999999999-bid.getAmount())));
bidl.sort(Comparator.comparing(bid -> String.format("%08d", 999999999-bid.getAmount())));
它从一个非常高的数字9999999中减去每个出价的值,然后使用比较器。比较它遍历列表中的每个元素,比较它们的值,然后对它们进行排序


结果是相反的,因为他从非常高的数字中减去出价。

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

String.format("%08d", 999999999-bid.getAmount())
通过以下方式进行比较:

以字典形式而不是数字形式比较项String.format 使用仅表示整数值的字符串作为d格式位 用0填充这些整数值的0格式位。。。 ... 要形成8位整数,请使用8位格式 假设bid.getAmount值始终小于该值,将原始值减去99999999后
这可能需要使用Comparator.comparingityour to函数重构,在这里转换bid.getAmount返回的任何内容

这一行的每件事都完成了:

bidl.sort(Comparator.comparing(bid -> String.format("%08d", 999999999-bid.getAmount())));
bidl.sort(Comparator.comparing(bid -> String.format("%08d", 999999999-bid.getAmount())));
这是一种非常奇怪的反向数字排序方法,但只要不存在整数溢出,它应该适用于不太大的数字。基本上,数字是否定的,这有效地颠倒了顺序,添加了一个无用的大数字,可能导致溢出,并转换为同样无用的字符串

更传统的方法是:

bidl.sort(Comparator.comparing(Bid::getAmount).reversed ());

给您一个类似但非常简单的示例来说明代码中发生了什么:

    List<Integer> list = Arrays.asList(1,3,5,6,2,7,9,8,4);
    list.sort(Comparator.comparing(i -> 10-i));