层次结构是这样:如何按属性排序自定义对象的矢量,即其他自定义对象的地图?
类药物 - 它有药品的名称和价格。
类供应商 - 它拥有一个地图
<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