gpt4 book ai didi

java - 在字符串列表中使用 Java 8 流 groupingBy?

转载 作者:行者123 更新时间:2023-12-04 11:04:44 24 4
gpt4 key购买 nike

我有以下字符串列表

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 而不是为每个项目使用 List。

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()));

关于java - 在字符串列表中使用 Java 8 流 groupingBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com