如何解决Java 8:递归流图
在我的Library
类中,有一个Set<Library> items
字段。因此,在LibraryDTO
中有Set<LibraryDTO> items
。当我从Library
构建LibraryDTO
时,我意识到我将在此项目字段中将DTO转换为实体时进入无限循环,例如:
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();
}
我曾考虑过要在项目流中使用递归方法,但是我在逻辑上遇到了困难。我该怎么办?我进行了研究,并看到了一些使用流进行递归的示例,但是无法针对我的情况进行复制。谢谢
解决方法
当您不需要递归调用以避免无限循环时,您需要使用基本情况。表示当libraryDTO.getItems()
为null时,请勿再次调用。
您可以使用三元运算符检查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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。