我将举一个我需要的小例子。我有这个简单的豆子:
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
}
我需要将
Collection<Item>
映射并分组到 Map<Category,List<SimpleItem>>
。我尝试过这样的事情
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){
//
}
}
问题是映射后,字段类别不存在了。有什么想法吗?
要获得你想要的东西,你需要在收集之前使用
groupingBy
和mapping
而不是map
,因为正如我在评论中所说,.map(this::mapToSimpleItem)
返回Stream<SimpleItem>
而不是Stream<Item>
,你的代码应该是:
return items.stream()
.collect(groupingBy(Item::getCategory,
mapping(this::mapToSimpleItem, Collectors.toList())));