我真的很想得到一些帮助来解释这段代码。代码作者如何使用排序?结果是反向数字排序。
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())
比较是通过以下方式进行的:
- 按字典顺序而不是数字方式比较项目 (
String.format
) - 使用
String
表示纯整数值(d
格式位) - 用
0
填充这些整数值(0
格式位)... - ...形成 8 位整数(
8
格式位) - 将原始值减去
999999999
后(假设bid.getAmount()
值始终小于该值)
这可能可以用Comparator.comparingInt(这里的ToIntFunction转换bid.getAmount()返回的任何内容).reversed()来重构。
关于java - 我如何解释这个java代码中的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490975/