Java8:需要在流中执行列表迭代并转换另一个对象的列表
我有一个来自服务的对象列表(项目)。 我想使用Java8流将List(Item)List转换为DB table ItemEntity对象。在该列表(Item)Item->have VarietyList中,如果VarietyList(ItemVariation)具有数据,则需要创建多个ItemEntity对象。如果VarietyList(ItemVariation)为空,则需要创建一个ItemEntity对象 下面的Java for每个代码都工作得很好,我需要Java 8流函数中的这段代码Java8:需要在流中执行列表迭代并转换另一个对象的列表,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个来自服务的对象列表(项目)。 我想使用Java8流将List(Item)List转换为DB table ItemEntity对象。在该列表(Item)Item->have VarietyList中,如果VarietyList(ItemVariation)具有数据,则需要创建多个ItemEntity对象。如果VarietyList(ItemVariation)为空,则需要创建一个ItemEntity对象 下面的Java for每个代码都工作得很好,我需要Java 8流函数中的这段代码
List<Item> itemList = from some services;
List<ItemEntity> itemEnt= new ArrayList();
for (Item item : itemsList) {
if (CollectionUtils.isNotEmpty(item.getVarietyList())) {
for (ItemVariety itemVariety : item.getVarietyList()) {
itemEnt.add(loadItemData(item , itemVariety));
}
} else {
itemEnt.add(loadItemData(item, null));
}
}
private ItemEntity loadItemData(Item itemType, ItemVariety itemVariety) {
ItemEntity itemEntity = new ItemEntity();
itemEntity.setName(itemType.getName());
if (itemVariety != null) {
itemEntity.setVarietyName(itemVariety .getName());
}
return cropEntity;
}
List itemList=来自某些服务;
List itemEnt=new ArrayList();
用于(项目:项目列表){
if(CollectionUtils.isNotEmpty(item.getVarietyList())){
对于(ItemVarietyItemVariety:item.getVarietyList()){
添加(loadItemData(item,itemVariable));
}
}否则{
add(loadItemData(item,null));
}
}
private ItemEntity loadItemData(Item itemType、ItemVariation ItemVariation){
ItemEntity ItemEntity=新的ItemEntity();
setName(itemType.getName());
if(itemVariable!=null){
itemEntity.setVarietyName(itemVariety.getName());
}
返回曲线;
}
如果您真的想使用流api,请向我推荐JAVA8中的最佳方法,您可以像下面这样做,但在我看来,在普通的旧java中,它更具可读性
List<ItemEntity> itemEnt = itemsList.stream()
.flatMap(item -> {
return CollectionUtils.isNotEmpty(item.getVarietyList())
? item.getVarietyList.stream().map(variety -> loadItemData(item, variety))
: Stream.of(loadItemData(item, null))
}).collect(Collectors.toList());
private ItemEntity loadItemData(Item itemType, ItemVariety itemVariety) {
ItemEntity itemEntity = new ItemEntity();
itemEntity.setName(itemType.getName());
if (itemVariety != null) {
itemEntity.setVarietyName(itemVariety .getName());
}
return cropEntity;
}
List itemEnt=itemsList.stream()
.flatMap(项目->{
return CollectionUtils.isNotEmpty(item.getVarietyList())
?item.getVarietyList.stream().map(变化->加载项数据(项目,变化))
:Stream.of(loadItemData(item,null))
}).collect(Collectors.toList());
private ItemEntity loadItemData(Item itemType、ItemVariation ItemVariation){
ItemEntity ItemEntity=新的ItemEntity();
setName(itemType.getName());
if(itemVariable!=null){
itemEntity.setVarietyName(itemVariety.getName());
}
返回曲线;
}
一般来说,类a
实例列表上的for循环可以转换为
List<A> as = .... ;
List<B> = as.stream().map(a -> createB(a)).collect(Collectors.toList());
List<A> as = .... ;
List<B> = as
.stream()
.flatMap(a -> CreateBs(a))
.collect(Collectors.toList());
当您可以为原始列表中的每个项目创建多个B实例时,可以将for循环转换为
List<A> as = .... ;
List<B> = as.stream().map(a -> createB(a)).collect(Collectors.toList());
List<A> as = .... ;
List<B> = as
.stream()
.flatMap(a -> CreateBs(a))
.collect(Collectors.toList());
目前我无法运行上面的代码,但我希望它能帮助您找到正在搜索的解决方案。您是否尝试过类似于
itemList.stream().forEach(il->{do your action})的方法代码>?如@AngeloImmediata建议的或itemList.stream().map(项目->某些操作);itemList.stream().map(item->loadItemData(item)).collect(Collectors.toList());private itemtentity loadItemData(Item itemType){itemtentity=new itemtentity()。
private Stream<ItemEntity> createItemEntity(Item item) {
return item.getVarietyList().isEmpty() ?
Stream.of(loadItemData(item, null)) :
item.getVarietyList().stream(x -> mapItemVarietyToItemEntity(item, x));
}
private ItemEntity mapItemVarietyToItemEntity(Item item, ItemVariety variety) {
loadItemData(item, variety);
}