Java 流映射和分组字段在映射后不再存在[重复]

问题描述 投票:0回答:1

我将举一个我需要的小例子。我有这个简单的豆子:

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){
        //
    }
    
}

问题是映射后,字段类别不存在了。有什么想法吗?

java collections java-stream groupingby
1个回答
2
投票

要获得你想要的东西,你需要在收集之前使用

groupingBy
mapping
而不是
map
,因为正如我在评论中所说,
.map(this::mapToSimpleItem)
返回
Stream<SimpleItem>
而不是
Stream<Item>
,你的代码应该是:

return items.stream()
        .collect(groupingBy(Item::getCategory, 
                mapping(this::mapToSimpleItem, Collectors.toList())));
© www.soinside.com 2019 - 2024. All rights reserved.