我在做一個Java比較器的練習,要求我按產品是否有庫存進行排序,然后按價格升序排列。更詳細的說明,請閱讀PriceStockComparator類中的評論。
import java.util.com比較器。
import java.util.Collections;
public class Product {
private String name;
private int priceCents;
private int stockLevel;
public Product(String name, int priceCents, int stockLevel) /span>{
this.name = name;
this.priceCents = priceCents;
this.stockLevel = stockLevel;
}
@Override[/span
public String toString() {
return this.name " 。" this.stockLevel " @ $" this.priceCents / 100.0;
}
/**.
* 這個比較器應該根據產品是否有庫存進行排序。
* 然后按其價格升序排序。
*
*在排序后,具有正庫存水平的產品應該出現在
* 如果兩個被排序的產品是:1)都是有庫存的;2)都是無庫存的。
* 1)都有庫存;或者2)都缺貨,那么它們
* 那么應該根據它們的價格以升序進行排序。
*/
static class PriceStockComparator implements Comparator<Product> {
@Override
public int compare(Product p1, Product p2) {
//在這里寫下你的代碼。
return Integer.compare(p1.stockLevel, p2.stockLevel) 。
}
}
我的程式出現了4個錯誤
=> java.lang.AssertionError: expected:< [Apple: 5 @ $1.0, Bottled Water: 2 @ $2.0, 甜面包圈: 7 @ $4.0]>但是是:<[瓶裝水。2 @ $2.0, 蘋果。5 @ $1.0, 甜面包圈: 7 @ $4.0] >
=> java.lang.AssertionError: expected:< [Apple: 5 @ $1.0, Bottled Water: 2 @ $2.0, 甜面包圈: 7 @ $4.0, Fish: 3 @ $6.0, Crackers: 0 @ $3.0, 雞蛋。0 @ $5.0]> but was:< [Crackers: 0 @ $3.0, Eggs: 0 @ $5.0, Bottled Water: 2 @ $2.0, 魚。3 @ $6.0, 蘋果。5 @ $1.0, 甜面包圈。7 @ $4.0] >
=> java.lang.AssertionError: expected:< [Crackers: 0 @ $3.0, Eggs: 0 @ $5.0]> but was:< [Eggs: 0 @ $5.0, Crackers: 0 @ $3.0] >
=> java.lang.AssertionError: expected:< [Donut: 7 @ $4.0, Fish: 3 @ $6.0, Eggs: 0 @ $5.0]> but was:< [Eggs: 0 @ $5.0, Fish: 3 @ $6.0, 甜面包圈: 7 @ $4.0] >
這是因為我對庫存水平進行了排序,但我不能讓它先成為正數,而且我沒有對價格進行升序排序。我不認為我可以在這里使用兩個compareTo(),我打算使用Collection.sort來對價格進行升序排序。但我不知道如何做到這一點。如果有人能幫助我,那就太好了。謝謝你!
uj5u.com熱心網友回復:
你可以把你的compareTo方法寫成如下:
public int compare(Product p1, Product p2){
//If both the products are in stock or are not in stock[/span].
//我們可以對它們進行價格比較。
if(p1.getStockLevel()>0 && p2.getStockLevel()> 0|
p1.getStockLevel()<=0 && p2.getStockLevel()<=0)
return Integer.compare(p1.getPriceCents(), p2.getPriceCents() )。
//如果第一個產品沒有庫存,那么我們就把它往下移。
//通過回傳一個-1。
else if(p1.getStockLevel()>0 && p2.getStockLevel()<=0)
return -1;
//如果第二個產品沒有庫存,但第一個產品有庫存。
else
return 1;
}
uj5u.com熱心網友回復:
你可以使用Java 8 lambda運算式。編譯器能夠推斷出型別定義。如果你的物件產品是在一個串列中,你可以這樣做......
List<Product> products = new ArrayList<> ();
Collections.sort(products, (a,b) -> a.priceCents - b.priceCents)。
如果你想要一個參考,Baeldung有一個很好的頁面,里面有一些你可以借鑒的例子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/310845.html
標籤:
