有没有办法在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
中是否有任何东西能够在没有痛苦的情况下实现这一目标?