表连接查询返出两个List,现在需要分别从这两个List中提取属性,组合返出一个新的List,使用guava可以解决。
引入依赖:
注意:引入18.0版本,启动时会报错。推荐使用20.0版本
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
如下:StockSupplier和Stock为实体类
// stockSupplierVoList为你要返回的VoList
List<StockSupplierVo> stockSupplierVoList = new ArrayList<>();
List<StockSupplier> stockSupplierList = stockSupplierService.getStockSuppliersByIds(warehouseIds);
// stockSupplierList非空判断处理,略......
stockSupplierList
.forEach(item -> {
stockIds.add(item.getStock().getId());
});
List<Stock> stockList = stockService.getStockByIds(stockIds);
// stockList非空判断处理,略......
//先将stockList转成以stockSupplierId为key,Stock为value的map
Map<Long, Stock> stockMap = Maps.uniqueIndex(stockList, new Function<Stock, Long>() {
@Override
public Long apply(Stock stock) {
return stock.getId();
}
});
//通过stockSupplierId从stockMap获取Stock对象,再转为最后需要的VO对象
for (StockSupplier stockSupplier : stockSupplierList) {
Stock stock = stockMap.get(stockSupplier.getStock().getId());
if (stock != null) {
StockSupplierVo stockSupplierVo = new StockSupplierVo();
stockSupplierVo.setStockSupplierId(stockSupplier.getId());
stockSupplierVo.setName(stockSupplier.getName());
stockSupplierVo.setDescription(stockSupplier.getDescription());
stockSupplierVo.setWareHouse(stockSupplier.getWarehouse());
stockSupplierVo.setStockUnit(stockSupplier.getStockUnit());
stockSupplierVo.setStockSupplierNum(stockSupplier.getStockNum());
stockSupplierVo.setCreator(stockSupplier.getCreator());
stockSupplierVo.setCreateTime(stockSupplier.getCreateTime());
stockSupplierVo.setModifier(stockSupplier.getModifier());
stockSupplierVo.setModificationTime(stockSupplier.getModificationTime());
stockSupplierVo.setGoods(stock.getGoods());
stockSupplierVo.setSpecification(stock.getSpecification());
stockSupplierVo.setStockNum(stock.getStockNum());
stockSupplierVoList.add(stockSupplierVo);
}
}