public class Product {
private final String name; // имя продукта
private final String manufacturerName; // имя производителя
// далле конструкоры, геттеры и т.д.
//...
}
和产品清单:
List<Product> products = Arrays.asList(
new Product("product1", "manufacturer1"),
new Product("product2", "manufacturer2"),
new Product("product3", "manufacturer1")
);
相反,
.collect(Collectors.counting())
最好使用.count()
,因为 这更具可读性,并且基本上做同样的事情。但
Collectors.counting()
它可以用于其他目的,例如,它可以用于收集器Collectors.groupingBy
等Collectors.collectingAndThen
。例子
有一个产品类:
和产品清单:
假设我们要获取
Map
,其中键是制造商的名称,值是生产的产品数量。你可以使用Collectors.counting
(如果你使用静态导入看起来不那么麻烦)来做到这一点:执行结果:
{manufacturer1=2, manufacturer2=1}
终端方法
count()
有一个有趣的特性——如果中间操作链中没有改变源数据量的操作(例如filter()
),那么这些中间操作将不会被执行。事实上,编译器执行优化以加快结果。例如:不会向控制台输出任何内容,同时
collect(Collectors.counting())
确保链中的所有方法都按标准执行。