我有一个练习要解决。我有一个Fox类,其中有名称和颜色字段。我的工作是按颜色查找狐狸的频率。
因此,我创建了一个HashMap,其中String属性将是fox名称,而Integer将是事件本身:
Map<String, Integer> freq = new HashMap<>();
这样做,我一直在尝试用流编写代码,但是我在努力做到这一点。我写了这样的东西:
foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);
,其中foxes是一个列表。
我的问题基本上是语法。我想做些什么,如果颜色没有出现,那么
freq.put(Fox::getName, 1)
其他
freq.replace(Fox::getName, freq.get(Fox::getName) + 1)
我应该如何将它们放在一起?
答案 0 :(得分:6)
我不建议继续使用您的方法,因为已经有一个内置的收集器,即groupingBy
收集器,其中counting()
位于下游:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.Authority = "https://localhost:44300/ids",
options.RequireHttpsMetadata = false;
options.Audience = "iqimplict";
});
这通过“名称”找到频率,同样,您可以通过更改分类功能通过颜色来获得频率。
Map<String, Long> result = foxes.stream()
.collect(Collectors.groupingBy(Fox::getName, Collectors.counting()));