[英]Using Java 8 streams groupingBy on a list of list of Strings?
我有以下字符串列表
List<String> product_a= Arrays.asList("Product A", "Category A", "Price");
List<String> product_b= Arrays.asList("Product A", "Category A", "Price");
List<String> product_c= Arrays.asList("Product B", "Category B", "Price");
List<String> product_d = Arrays.asList("Product C", "Category C", "Price");
然后,我把它們放在另一個列表中
List<List<String>> products = new ArrayList<>();
products.add(product_a);
products.add(product_b);
products.add(product_c);
products.add(product_d);
使用流,Collectors.groupingBy,Collectors.counting,我如何獲得以下輸出? 可能嗎?
Product A - 2
Product B - 1
Product C - 1
提前謝謝你的幫助。
你的意思是 :
Map<String, Long> group = products.stream()
.collect(Collectors.groupingBy(c -> c.get(0), Collectors.counting()));
group.entrySet().forEach(c -> System.out.println(c.getKey() + " - " + c.getValue()));
輸出
Product A - 2
Product B - 1
Product C - 1
但我想創建一個類來保存這三個信息product
category
price
而不是使用每個項目的列表。
class Product{
private String productName;
private String category;
private BigDecimal price;
//constructors getters setters
}
然后在產品列表中填寫您的產品,如下所示:
List<Product> products = new ArrayList<>();
products.add(new Product("Product A", "Category A", new BigDecimal("123")));
products.add(new Product("Product A", "Category A", new BigDecimal("456")));
products.add(new Product("Product B", "Category B", new BigDecimal("696")));
products.add(new Product("Product C", "Category C", new BigDecimal("66")));
然后你分組可以是:
Map<String, Long> group = products.stream()
.collect(Collectors.groupingBy(Product::getProductName, Collectors.counting()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.