[英]i want to convert to java 8 stream in this block?
如何在此塊中轉換為Java 8流語法?
List<Product> tmpList = new ArrayList<>();
tmpList.add(new Product("prod1", "cat2", "t1", 100.23, 50.23));
tmpList.add(new Product("prod2", "cat1", "t2", 50.23, 50.23));
tmpList.add(new Product("prod1", "cat1", "t3", 200.23, 100.23));
tmpList.add(new Product("prod3", "cat2", "t1", 150.23, 50.23));
tmpList.add(new Product("prod1", "cat2", "t1", 100.23, 10.23));
Map<String, List<Product>> proMap = tmpList.stream().collect(Collectors.groupingBy(Product::getName));
//start
List<Product> productList = new ArrayList<>(); //
for(String productName : proMap.keySet()) {
double totalCostIn = proMap.get(productName).stream().mapToDouble(Product::getCostIn).sum();
double totalCostOut = proMap.get(productName).stream().mapToDouble(Product::getCostOut).sum();
productList.add(new Product(productName,totalCostIn,totalCostOut));
}
// how to convert to java 8 stream grammer in this block ?
List<Product> productList = proMap.entrySet().stream()...
你可以這樣做
Collection<Product> productsByName = tmpList.stream()
.collect(Collectors.toMap(Product::getName,
Function.identity(),
(p1, p2) -> new Product(p1.getName(),
p1.getCostIn() + p2.getCostIn(), p1.getCostOut() + p2.getCostOut())))
.values();
您可以在流式傳輸時map
和collect
List<Product> productList = proMap.keySet().stream()
.map(productName -> new Product(productName,
proMap.get(productName).stream().mapToDouble(Product::getCostIn).sum(),
proMap.get(productName).stream().mapToDouble(Product::getCostOut).sum()))
.collect(Collectors.toList());
在另一方面,如果你要查找海東青/ costOut給定的產品名稱,你可能已經直接存儲這些的總和與特定的產品名稱,而groupingBy
,如
Map<String, Double> costIn = tmpList.stream()
.collect(Collectors.groupingBy(Product::getName,
Collectors.summingDouble(Product::getCostIn)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.