将值附加到HashMap <string,=“”arralist <object =“”>&gt;

时间:2016-06-26 18:39:46

标签: java arraylist hashmap

我正在尝试创建一个简单的HashMap,它将一个String作为键,并且每个键都有一个对象的ArrayList。

我提出的解决方案的问题是在循环结束时,我在ArrayList中只获得一个值(Object)...

我尝试在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);
                    }
                }
            }

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的那样,问题很可能是支票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);
}