在Java8 Streams中收集和映射

时间:2016-10-03 10:56:48

标签: java java-8 java-stream collectors

有没有办法在Java 8中做这样的事情?我有以下界面:

public interface MyInterface{
    String groupId();
    Integer value();
}

我想写下面的方法

public static Map<String, List<Integer>> groupByGroupId(Collection<MyInterface> mis){
    //...
}

事情是我不能在流上map,因为我丢失了MyInterface信息。

mis.stream().map(MyInterface::value) // lose groupId

同样,两次迭代集合是不可接受的。我的意思是我可以应用groupingBy来获取Map<String, MyInterface>

mis.stream.collect(
    groupingBy(
        MyInterface::groupId
    )
)

但是通过这种方法,我必须迭代生成的地图以获得我想要的东西。也许我可以使用

groupingBy(classifier, downstreamCollector)

但找不到收集时收集并进行映射的收集器。 JDK中是否有任何东西能够在没有痛苦的情况下实现这一目标?

0 个答案:

没有答案