将List <Product>转换为Map <Integer,List <Product >>

Ser*_*hyi 1 java collections list map

您可以向我假设最好或更优雅的方式,将List<Product>所有Map<Integer, List<Product>>产品转换 为按ProductNumber分组的产品.

例如我的产品POJO.

public class Product{
.. 
private Integer productCode;
private String productName;
...
//getters, setters
}
Run Code Online (Sandbox Code Playgroud)

这是我的尝试,但我认为它不那么优雅:

public Map<Integer, List<Product>> getProductsByIndex (List<Product> products){
        Map<Integer, List<Product>> resultMap = new HashMap<>();
        Set<Integer> productCodes = getProductCodes(products);

        for(Integer productCode: productCodes){
            List<Product> productsByCode = new ArrayList<>();
            for(Product product : products){
                if(productCode == product.getCode()){
                    productsByCode.add(product);    
                }
            }
            resultMap.put(productCode, productsByCode);
        }
        return resultMap;
    }

    public Set<Integer> getProductCodes (List<Product> products){
        Set<Integer> productCodes = new HashSet<>();
        for(Product product: products){
            productCodes.add(product.getCode());
        }
        return productCodes;
    }
Run Code Online (Sandbox Code Playgroud)

use*_*315 6

Java 8解决方案:

Map<Integer, List<Product>> productsByCode  = products.stream()
                    .collect(Collectors.groupingBy(Product::getProductCode));
Run Code Online (Sandbox Code Playgroud)