我有一个Stream<String>
,我想要一个Map<Integer, String>
。让我们调用我的分类器函数getKey(String)
- 它可能很昂贵。有时它返回零,这意味着字符串应该被丢弃并且不包含在结果映射中。
所以,我可以使用这段代码:
Stream<String> stringStream;
Map<Integer, String> result =
stringStream.collect(Collectors.groupingBy(this::getKey, Collectors.joining());
result.remove(0);
这首先将不需要的字符串添加到以零为键的 Map 中,然后将其删除。他们可能有很多。有没有一种优雅的方法可以避免首先将它们添加到地图中?
我不想在分组之前添加过滤步骤,因为这意味着执行决策/分类代码两次。