我需要流一个多对一的列表。我想我需要一个平面地图,但我不能使它运行。我有以下对象:
UserRoles:
@Data
@AllArgsConstructor
public class UserRoles {
private int userId;
private Integer projectId;
private List<Integer> userRoles;
}
UserProjectRole:
public class UserProjectRole {
@EmbeddedId private UserProjectRolePk id;
private User user;
private Project project;
private UserRole userRole;
}
给定一个UserRoles列表,我需要创建一个新的UserProjectRole列表。到目前为止,我有:
List<UserProjectRole> projectRoles = userRolesDtos.stream()
.map(it -> Stream.of(it.getUserRoles())
.flatMap(x -> new UserProjectRole(it.getUserId(), it.getProjectId(), x)))
.collect(Collectors.toList());
但x是一个List<Integer>当我期望它只是角色id的时候。谁能帮忙吗?
# # #Stream.of()
creat从varargs数组创建一个流。当你传递一个列表时,它会创建一个包含一个列表元素的流。
尝试从列表中获取流。此外,flatMap()只适用于流结果(查看order和花括号)。
List<UserProjectRole> projectRoles = userRolesDtos.stream()
// stream of UserProjectRole
.flatMap(it -> it.getUserRoles().stream()
// intermediate stream of Integer
.map(x -> new UserProjectRole(it.getUserId(), it.getProjectId(), x)
// mapped to intermediate stream of UserProjectRole
)
// finished call to flatMap returning a flat stream of UserProjectRole
.collect(Collectors.toList());