Java8:递归流Map

ldxq2e6h  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(388)

在我的 Library 班上有一个 Set<Library> items 现场。因此,在 LibraryDTO 我有 Set<LibraryDTO> items . 当我建立一个 LibraryLibraryDTO ,我意识到在将dto转换为items字段中的实体时,我将进入一个无限循环,例如:

private Library buildLibraryFromLibraryDTO(LibraryDTO libraryDTO) {

return Library.builder()        
        .items(libraryDTO.getItems().stream().map(library -> Library.builder()                      
                .items(library.getItems().stream().map ... repeats the same DTO to entity conversion process from the above level)                  
                .build()).collect(Collectors.toSet()))

        .build();
}

我曾想过在items流中创建一个递归方法,但在逻辑上遇到了困难。我怎么能做到?我研究并看到了一些使用stream的递归示例,但无法为我的案例进行复制。谢谢您

5lwkijsr

5lwkijsr1#

当不需要递归调用以避免无限循环时,需要使用基本情况。意味着什么时候 libraryDTO.getItems() 如果为空,则不再调用。
可以使用三元运算符检查 libraryDTO.getItems() 不为空,则调用 buildLibraryFromLibraryDTO 对于其他每一项为空。

private Library buildLibraryFromLibraryDTO(LibraryDTO libraryDTO) {
return Library.builder()
        .items(libraryDTO.getItems() != null 
                       ? libraryDTO.getItems()
                         .stream()
                         .map(library -> buildLibraryFromLibraryDTO(library))
                         .collect(Collectors.toSet())
                       : null)
        .build();
}

相关问题