无法解析方法';地图';Java 8 Lambda

无法解析方法';地图';Java 8 Lambda,lambda,java-8,Lambda,Java 8,我有一套物品。我想根据某些标准对其进行过滤,这些标准符合标准,我想执行一些操作,然后再进行一些映射 Set<Tasks> v1; Map<V, Long> vC = v1.stream() .filter(t -> someCondition(t)) //for these filtered operations perform some action .forEach(

我有一套物品。我想根据某些标准对其进行过滤,这些标准符合标准,我想执行一些操作,然后再进行一些映射

Set<Tasks> v1;
Map<V, Long> vC = v1.stream()
                .filter(t -> someCondition(t))
                //for these filtered operations perform some action
                .forEach(t -> t.performAction(summation(t))
                .map(t->summation(t))
                .collect(groupingBy(identity(), counting()));
设置v1;
Map vC=v1.stream()
.filter(t->someCondition(t))
//对于这些过滤操作,请执行一些操作
.forEach(t->t.performation(总和(t))
.map(t->求和(t))
.收集(分组方式(标识(),计数());

我在map上遇到一个错误,无法解析方法“map”。如果我删除forEach,它会工作。我知道forEach是一个终端操作,但我想不出替代方法。

编辑:今天(2019年11月)我对这个答案不满意

问题是没有正确使用
Stream.peek
方法。事实上,
peek
仅用于调试目的

而且,正如@Holger在评论部分所述,
summation
方法被调用了两次,这清楚地表明这不是一个好的答案

我在下面保留我的原始答案,以提醒我自己和其他人,有时流不是最合适的


您可以使用该操作来实现您想要的:

Map<V, Long> vC = v1.stream()
    .filter(t -> someCondition(t))
    .peek(t -> t.performAction(summation(t))
    .map(t->summation(t))
    .collect(groupingBy(identity(), counting()));
Map vC=v1.stream()
.filter(t->someCondition(t))
.peek(t->t.performation(总和(t))
.map(t->求和(t))
.收集(分组方式(标识(),计数());
…和。除此之外,此代码计算两次求和(t),这是一个寻求替代解决方案的叫喊…