如何将 Iterable<T> 映射到它的 DTO?

问题描述 投票:0回答:1

我有以下存储库:

权限存储库:

public interface PermissionRepository extends CrudRepository<Permission, Long>,
        SearchRepository<Permission> {

}

在我的服务中,我尝试将

Permission
实体映射到
PermissionDTO
,但由于
findAll()
方法返回
Iterable<T>
(
Iterable<T> findAll();
),我无法像通常用于
List<T>
那样进行如下所示的转换。它会针对 .stream() 方法抛出“
无法解析‘Iterable’中的方法‘stream’
”错误。

List<PermissionDTO> list = permissionRepository.findAll()
        .stream()
        .map(PermissionDTO::new)
        .collect(Collectors.toList());

那么,如何将这个

Permission
实体映射到
PermissionDTO

java list iterator java-stream
1个回答
3
投票

有3种方法可以做你想做的事

覆盖

findAll
并使其返回
List

public interface PermissionRepository extends CrudRepository<Permission, Long> {
    @Override
    List<Permission> findAll();
}

实施

JpaRepository
而不是
CrudRepository

public interface PermissionRepository extends JpaRepository<Permission, Long>,
    SearchRepository<Permission>

使用

Iterable
Stream
转换为
StreamSupport

StreamSupport.stream(iterable.spliterator(), false).map(PermissionDTO::new)
    .collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.