映射后不再存在的Java流映射和groupingby字段
我要举一个我需要的例子。我有一个简单的豆子:映射后不再存在的Java流映射和groupingby字段,java,collections,stream,java-stream,groupingby,Java,Collections,Stream,Java Stream,Groupingby,我要举一个我需要的例子。我有一个简单的豆子: public class Item { private String name; private String code; private Category category; //getters and setters omitted for brevity } public class SimpleItem { private String name; private Str
public class Item {
private String name;
private String code;
private Category category;
//getters and setters omitted for brevity
}
public class SimpleItem {
private String name;
private String code;
//getters and setters omitted for brevity
}
我需要将集合映射并分组到映射
。我试过这样的东西
public class itemMapper {
public Map<Category,List<SimpleItem>> map(Collection<Item> items){
return items.stream()
.map(this::mapToSimpleItem)
.collect(groupingBy(Item::getCategory));
}
private SimpleItem mapToSimpleItem(Item item){
//
}
}
公共类项目映射器{
公共地图(集合项目){
returnitems.stream()
.map(此::mapToSimpleItem)
.collect(groupingBy(Item::getCategory));
}
私有SimpleItem映射到SimpleItem(项){
//
}
}
问题是映射之后,字段类别不再存在。有什么想法吗?要想得到你想要的东西,你需要在收集之前使用groupby
和map
,而不是map
,因为正如我在评论中所说的,.map(this::mapToSimpleItem)
返回Stream
而不是Stream
,你的代码应该是:
return items.stream()
.collect(groupingBy(Item::getCategory,
mapping(this::mapToSimpleItem, Collectors.toList())));
您使用的是.map(this::mapToSimpleItem)
因此在收集部分,您有一个流
,而不是流
OP知道,OP是询问如何分组,然后基本映射,第一个答案解释了这一点。