我真的很想得到一些帮助来解释这段代码。代码编写者如何使用排序?结果是反向数字排序。
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");
}
}
答案 0 :(得分:4)
至少可以说是比较数字的一种非常奇怪的方法。 它的核心在这里:
String.format("%08d", 999999999-bid.getAmount())
比较通过:
String.format
)比较项目String
代表仅整数值(d
格式位)0
s(0
格式位)填充这些整数值... 8
格式位)999999999
后(假设bid.getAmount()
值始终小于该值)这可能可以用Comparator.comparingInt(your ToIntFunction here converting whatever bid.getAmount() returns).reversed()
重构。
答案 1 :(得分:1)
一切都在这一行完成:
bidl.sort(Comparator.comparing(bid -> String.format("%08d", 999999999-bid.getAmount())));
这是进行反向数字排序的一种非常奇怪的方法,但是它应该适用于不太大的数字(只要没有整数溢出)。基本上,数字是取反的(有效地颠倒了顺序),添加了一个大数字(这是无用的并可能导致溢出),然后转换为字符串(这也是无用的)。
更常规的方法是:
bidl.sort(Comparator.comparing(Bid::getAmount).reversed ());
答案 2 :(得分:1)
为您提供类似但非常简单的示例,以澄清代码中发生的事情:
@param
答案 3 :(得分:0)
排序在这一行:
bidl.sort(Comparator.comparing(bid -> String.format("%08d", 999999999-bid.getAmount())));
它从一个非常高的数字(999999999)中减去每个出价的值,然后使用Comparator.comparing
遍历列表的每个元素并比较它们的值,然后对它们进行排序。
结果是相反的,因为他从很高的数字中减去了出价。