映射后不再存在的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是询问如何分组,然后基本映射,第一个答案解释了这一点。