Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8:需要在流中执行列表迭代并转换另一个对象的列表_Java_Java 8_Java Stream - Fatal编程技术网

Java8:需要在流中执行列表迭代并转换另一个对象的列表

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流函数中的这段代码

我有一个来自服务的对象列表(项目)。 我想使用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);
}