我尝试使用Collections.sort,直到我希望它在双变量之间进行排序
价格是双重变量......
@Override
public int compareTo(Product p) {
double lastCmp = this.price.compareTo(p.getPrice());
return (lastCmp != 0 ? lastCmp : this.price.compareTo(p.getPrice()));
}
public void OrganizeByLowestPrice(Basket basket) {
ArrayList<Product> products1 = basket.getBasket();
Collections.sort(products1, new Comparator<Product>() {
@Override
public int compare(Product product, Product t1) {
return product.getPrice().compareTo(t1.getPrice());
}
});
}
我添加了Product的代码。 问题保持不变。 它曾经为我工作,但现在因为我正在恢复丢失的代码而不是。
答案 0 :(得分:1)
所以这里真正的问题是编译错误。密切相关的是:
for (int i = 0; i < _downloadList.Count; i++)
{
var url = _downloadList.ToArray()[i];
Task.Factory.StartNew
(
async () =>
{
try
{
MegaApiClient client = new MegaApiClient();
//client.LoginAnonymous();
downloadIndex = i;
IProgress<double> progressHandler = new Progress<double>(p => HandleUnitProgressBar(p, downloadIndex));
await client.DownloadFileAsync(fileLink, url.Value, progressHandler);
}
catch (Exception e)
{
//will add later
}
}
, CancellationToken.None
, TaskCreationOptions.None
, TaskScheduler.Current
);
}
这些是直截了当的:
发生第一个错误是因为您尝试在Product.java:51: error: double cannot be dereferenced
double lastCmp = this.price.compareTo(p.getPrice());
^
Product.java:52: error: double cannot be dereferenced
return (lastCmp != 0 ? lastCmp : this.price.compareTo(p.getPrice()));
^
Product.java:52: error: incompatible types: possible lossy conversion from double to int
return (lastCmp != 0 ? lastCmp : this.price.compareTo(p.getPrice()));
^
上调用方法(compareTo
)。那不是有效的Java。原始类型没有方法。
出现第二个错误的原因与第一个
发生最终错误是因为double
生成(lastCmp != 0 ? lastCmp : this.price.compareTo(p.getPrice()))
,但是。{
double
方法必须返回Product::compareTo
。因此,int
语句尝试将return
转换为double
。但是从int
到double
的转换是有损的,并且Java语言需要显式类型转换来执行此操作。
解决方案:
int
变量不应为lastCmp
。它应该是double
。
如果要比较两个int
值,请使用静态double
方法; e.g。
Double::compare
答案 1 :(得分:0)
你可以简单地使用lambda。
public void OrganizeByLowestPrice(Basket basket) {
ArrayList<Product> products1 = basket.getBasket();
Collections.sort(products1, (a,b)->{
return Double.compare(b.getPrice(),a.getPrice());
});
}
它根据价格按递减顺序对列表进行排序。