層次結構是這樣:如何按屬性排序自定義對象的矢量,即其他自定義對象的地圖?
類藥物 - 它有藥品的名稱和價格。
類供應商 - 它擁有一個地圖
<Drug drug, int quantity>
。
現在我有一個Vector<Suppliers>
(持有,比方說,5個供應商),我想在一個遞減輸入用戶名藥物的數量的順序排序。
這甚至可能嗎?我試過使用比較器,但我無法使它工作。
好吧,我試圖做的只是把供應商,已通過作爲參數藥物在一個新的List
通過,然後在列表上執行排序。我認爲這是一個很好的解決方法,但是我需要以某種方式更改'排序'。
這裏是我遍歷所有供應商並檢查他們是否有藥物的方法,如果他們這樣做 - >將它們添加到新列表中並嘗試最後對其進行排序。
public List<Supplier> getSortedSuppliersByQuantity(Drug drug) {
List <Supplier> sortedSuppliers = new ArrayList <Supplier>();
for(Supplier s : suppliers) {
for(Entry<Drug, Integer> entry : s.getListOfDrugs().entrySet()) {
if(entry.getKey().getDrugsName().equals(drug.getDrugsName()));
sortedSuppliers.add(s);
}
}
sort(drug, sortedSuppliers);
return sortedSuppliers;
}
問題是,我得到了NullPointerException
在sort
線。
我認爲sort
方法,你建議,需要改變,以某種方式行事新的列表,而不是舊的?
堆棧跟蹤爲@Andrew
Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Unknown Source)
at java.util.Optional.<init>(Unknown Source)
at java.util.Optional.of(Unknown Source)
at myapp.Supplier.getKeyExtractor(Supplier.java:22)
at myapp.Orders.lambda$0(Orders.java:89)
at java.util.Comparator.lambda$comparing$77a9974f$1(Unknown Source)
at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.ArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at myapp.Orders.sort(Orders.java:89)
at myapp.Orders.getSortedSuppliersByQuantity(Orders.java:106)
at myapp.main.main(main.java:22)
你爲什麼使用'Vector <>'? – Andrew
你的'Comparator'在哪裏? –
實際上沒有一般用途,我只是認爲它能很好地適應我。這是錯的嗎? – Calihog