如何解释此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));