我正在尝试创建一个简单的HashMap,它将以String作为键,并且对于每个键,都有一个ObjectArray。
我想出的解决方案的问题是在循环的结尾,我在ArrayList中只得到一个值(对象)。
我尝试在Apache Commons中使用MultiValueMap,但我的IDE抗议,它说它已被弃用
//filter products by supplier
for(String nume:SuppliersNames){
ArrayList<Order.Product> gol = new ArrayList<>();
SuppliersMap.put(nume,gol);
//we make a copy of the products collection so we can iterate it and filter elements by supplier
ArrayList<Orders.Order.Product> interm = new ArrayList<Orders.Order.Product>(products);
Iterator<Orders.Order.Product> iter = interm.iterator();
while (iter.hasNext()){
Orders.Order.Product curent = iter.next();
if(curent.getSupplier()== nume){
SuppliersMap.get(nume).add(curent);
}
}
}
最佳答案
如评论中所述,问题很可能是检查curent.getSupplier() == nume
。您在这里比较身份,这可能不是您想要的。尝试将其更改为curent.getSupplier().equals(nume)
,看看会发生什么。
此外,由于您没有在发布的代码段中修改此集合,因此无需创建products
集合的本地副本。
使用Java8流,您的代码可以更改为:
for (String name : suppliersNames) {
List<Product> gol = products.stream().filter(p -> p.getSupplier().equals(name))
.collect(Collectors.toList());
suppliersNames.put(name, gol);
}