Java 将对象的两个数组列表与第一个数组中的结构字段合并
我有两个对象数组列表,我需要从第二个数组列表中的一些字段对象元素中填充第一个数组列表中的对象元素,该项目需要最佳性能。请指导我解决此问题的最佳方法 第一个数组列表的对象结构Java 将对象的两个数组列表与第一个数组中的结构字段合并,java,arrays,java-stream,Java,Arrays,Java Stream,我有两个对象数组列表,我需要从第二个数组列表中的一些字段对象元素中填充第一个数组列表中的对象元素,该项目需要最佳性能。请指导我解决此问题的最佳方法 第一个数组列表的对象结构ArrayList和 使用SellProductAmountTo的条件sellContractId字段和SellContractProduct的id填充OrderProductDTO对象 public class SellProductAmountDTO { private Long sellContractId;
ArrayList
和
使用SellProductAmountTo的条件sellContractId字段和SellContractProduct的id填充OrderProductDTO对象
public class SellProductAmountDTO {
private Long sellContractId;
private Long amount;
private OrderProductDTO orderProduct;
//getter ans setters
}
并将产品订购至结构:
public class OrderProductDTO {
private List<Long> costGroupId;
private Long productId;
}
公共类OrderProductDTO{
私有列表costGroupId;
私有长productId;
}
和第二个数组列表的对象结构ArrayList
:
公共类产品{
私人长id;
私有长rateGroupId;
私有长CurrencyGrateGroupId;
私有集类型;
私人消费;
私有长productId;
私人买卖合约客户买卖合约客户;
私有集仓库=新的HashSet();
私有列表costgroupid;
私有列表currencyID;
//二传手
}
如果我正确理解您的问题,这应该可以:
List<SellProductAmountDTO> sellProductAmountDTOList = new ArrayList<>(); // this should be full
List<SellContractProduct> sellContractProductList = new ArrayList<>(); // this should be full
// build a stream on array 2 to use in the for loop
Stream<SellContractProduct> SellContractProductListStream = sellContractProductList.stream();
for(SellProductAmountDTO sellProductAmountDTO : sellProductAmountDTOList) {
// find the correct SellContractProduct
Optional<SellContractProduct> productOption = SellContractProductListStream
.filter(sellContactProduct -> sellContactProduct.getId().equals(sellProductAmountDTO.getSellContractId()))
.findFirst();
// if the SellContractProduct was found, then set its values into the sellProductAmountDTO's order product
if(productOption.isPresent()) {
sellProductAmountDTO.getOrderProduct().setProductId(productOption.get().getId());
sellProductAmountDTO.getOrderProduct().setCostGroupId(productOption.get().getCostGroupIds());
}
}
List sellProductAmountDTOList=new ArrayList();//这个应该满了
List sellContractProductList=新建ArrayList();//这个应该满了
//在数组2上构建一个流以在for循环中使用
Stream SellContractProductListStream=sellContractProductList.Stream();
for(SellProductAmount到SellProductAmount到:SellProductAmount到){
//找到正确的产品
可选productOption=SellContractProductListStream
.filter(sellContactProduct->sellContactProduct.getId().equals(sellProductAmountDTO.getSellContractId())
.findFirst();
//如果找到了SellContractProduct,则将其值设置为SellProductAmount到的订单产品中
if(productOption.isPresent()){
sellProductAmountDTO.getOrderProduct().setProductId(productOption.get().getId());
sellProductAmountDTO.getOrderProduct().setCostGroupId(productOption.get().GetCostGroupId());
}
}
编辑使用地图可能会有更好的性能
List<SellProductAmountDTO> sellProductAmountDTOList = new ArrayList<>(); // this should be full
List<SellContractProduct> sellContractProductList = new ArrayList<>(); // this should be full
// make a map listing contracts by their Id
Map<Long, SellContractProduct> SellContractProductMap = sellContractProductList.stream()
.collect(Collectors.toMap(SellContractProduct::getId, Function.identity()));
for(SellProductAmountDTO sellProductAmountDTO : sellProductAmountDTOList) {
// find the correct SellContractProduct in the map
SellContractProduct product = SellContractProductMap.get(sellProductAmountDTO.getSellContractId());
if(product != null) {
sellProductAmountDTO.getOrderProduct().setProductId(product.getId());
sellProductAmountDTO.getOrderProduct().setCostGroupId(product.getCostGroupIds());
}
}
List sellProductAmountDTOList=new ArrayList();//这个应该满了
List sellContractProductList=新建ArrayList();//这个应该满了
//制作一张地图,按合同Id列出合同
Map SellContractProductMap=sellContractProductList.stream()
.collect(Collectors.toMap(SellContractProduct::getId,Function.identity());
for(SellProductAmount到SellProductAmount到:SellProductAmount到){
//在地图中找到正确的SellContractProduct
SellContractProduct=SellContractProductMap.get(SellProductAmountTo.getSellContractId());
如果(产品!=null){
sellProductAmountDTO.getOrderProduct().setProductId(product.getId());
sellProductAmountDTO.getOrderProduct().setCostGroupId(product.GetCostGroupId());
}
}
你能再努力解释一下你的问题吗?我不知道你在问什么。SellContractProduct列表已满,我将使用条件SellContractProduct的id和SellContractProduct的SellContractProduct的id填写OrderProductDTO的costGroupId和productId,并使用SellProductAmountTo的SellContractD提供一些初始代码,显示您尝试执行的操作和列表的大小
List<SellProductAmountDTO> sellProductAmountDTOList = new ArrayList<>(); // this should be full
List<SellContractProduct> sellContractProductList = new ArrayList<>(); // this should be full
// make a map listing contracts by their Id
Map<Long, SellContractProduct> SellContractProductMap = sellContractProductList.stream()
.collect(Collectors.toMap(SellContractProduct::getId, Function.identity()));
for(SellProductAmountDTO sellProductAmountDTO : sellProductAmountDTOList) {
// find the correct SellContractProduct in the map
SellContractProduct product = SellContractProductMap.get(sellProductAmountDTO.getSellContractId());
if(product != null) {
sellProductAmountDTO.getOrderProduct().setProductId(product.getId());
sellProductAmountDTO.getOrderProduct().setCostGroupId(product.getCostGroupIds());
}
}