Java8流和过滤器

Tan*_*nia 3 java guava java-8 java-stream

我有一个set multimap,它存储了一个月的一些字符串(整数).

MonthlyCount = {1:["hello"],2:["hello","hi"]}   
Run Code Online (Sandbox Code Playgroud)

我有一个地图,计算每月的字符串数量并添加它们.我使用containsKey过滤器来检查密钥是否存在于集合中,并将它们添加到地图中.

final String[] months = new DateFormatSymbols().getShortMonths();
final Map<String, Object> metaData = new LinkedHashMap<>();
private SetMultimap<Integer, String> MonthlyCount;

for (int i = 0; i <= month; i++) {
    final int count = MonthlyCount.containsKey(i + 1) ? MonthlyCount.get(i + 1).size() : 0;
    metaData.put(months[i], count);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用Java8的流和过滤器实现相同的行为?

Era*_*ran 5

您可以使用a IntStream来迭代所需的范围并用于Collectors.toMap生成所需的映射:

Map<String,Integer> map =
IntStream.range(0,months.length)
         .boxed()
         .collect(Collectors.toMap(i->months[i], 
                                   i->MonthlyCount.containsKey(i + 1) ? MonthlyCount.get(i + 1).size() : 0));
Run Code Online (Sandbox Code Playgroud)