我的原始数据是像
这样的字符串流correctname
abc,def,ghi,jol
abc
def,ghi
zzzzzzzzzz
myname
pppppppppp
jkl
转换它设置:
{correct}
{abc, def,ghi,jkl}
{abc}
{def,ghi}
{invalid}
{correct}
{invalid}
{jkl}
我有一些Stream.map(...)让我回到结果
Map<String,Long> answer = Stream.map(...).collect(groupingby??)
现在我想收集它(收集或映射或分组)并将结果作为Map返回,以便我的回答应该是
地图&GT; {正确:2 无效:2 其他人:8}
答案 0 :(得分:4)
这里的诀窍是flatMap
每个都设置为其中的字符串。完成后,您可以使用map
将值转换为您感兴趣的值并对其进行计数。 E.g:
Set<String> allowed = new HashSet<>(Arrays.asList("correct", "invalid"));
Map<String, Long> result =
values.flatMap(Set::stream)
.map(s -> allowed.contains(s) ? s : "other")
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));
答案 1 :(得分:2)
听起来你正在寻找这个:
Map<String, Long> answer = sets.stream()
.flatMap(Set::stream)
.collect(Collectors.groupingBy(
s -> s.matches("invalid|correct") ? s : "others",
Collectors.counting()));