你能承担我的最佳以上ellegant方式, List<Product>
allProducts转换为Map<Integer, List<Product>>
产品由ProductNumber分组。转换列表<Product>地图<整数,列表<Product>>
例如我的产品POJO。
public class Product{
..
private Integer productCode;
private String productName;
...
//getters, setters
}
这是我的尝试,但我觉得它不那么ellegant:
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;
}
正确的答案,但您应该注意,'productsByCode'是您的结果,而不是原始代码中的'resultMap'。 – jwueller
+1,或许不像以前那样*优雅*就像下面的Java 8解决方案一样易于理解 – user1781290
@ user1781290:它也适用于目前正在使用的几乎所有Java版本,显着提高了此代码段/回答的实用性。 – jwueller