例如:我有一个包含两个或更多Product实例对象的Set("它们具有不同的金额值")
public class Product{
private int id;
private String name;
private String brand;
private Long amount;
// getter and setters
}
可以使用Stream来获取单个对象并对金额值求和吗?
答案 0 :(得分:2)
yourSet.stream().mapToInt(Product::getAmount).sum()
会为您提供金额总和,您可以创建一个Product
对象,将金额设置为此总和。
答案 1 :(得分:1)
假设您有一个Set<Product>
,其中每个产品具有相同的ID,名称和品牌但数量不同。我们可以轻松地创建一个新的Product
,但使用一个Stream
这样做是多余的(我们可能会使用reduce
,但可能会有更多的开销,而不仅仅是执行以下操作)。相反,让我们为您的问题创建一个空置安全的解决方案:
public Product getTotalAsProduct(Set<Product> set) {
Product newProduct = null;
Optional<Product> findProduct = set.stream().findFirst();
if(findProduct.isPresent()) { //No sense in making an object if set is empty
//Create a new Product with the same id, name, brand
newProduct = findProduct.get().clone(); //If Cloneable, OR create a constructor that takes a Product and makes a new one, OR make a new Product() and get/set as needed
long totalAmount = set.stream().mapToInt(Product::getAmount).sum();
newProduct.setAmount(totalAmount);
}
return newProduct; //Null if set was empty
}