使用 Java 8 将列表分组以列出 DTO

Group List to List DTO using Java 8

我想使用 JAVA 将 DTO 中的 InscricaoTipoTrabalhoAvaliador 列表按相等 AvaliadorEvento 进行分组 8. 有人可以帮忙吗?

银行查询returns 4行,其中ID 10和ID 13相同AvaliadorEventoId,我想将它们分组在DTO中:

InscricaoTipoTrabalhoAvaliador

@Entity
@Table(name = "inscricao_tipo_trab_aval")
@Getter
@Setter
public class InscricaoTipoTrabalhoAvaliador implements Entidade{
  
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="inscricao_tipo_trabalho_id")
  private InscricaoTipoTrabalho inscricaoTipoTrabalho;
    
  @OneToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "avaliador_evento_id")
  private AvaliadorEvento avaliadorEvento;
    
  @Enumerated(EnumType.STRING)
  @Column(name = "situacao_avaliador")
  private SituacaoTrabalho situacaoTrabalho;

  @Transient
  private List<InscricaoTipoTrabalho> inscricaoTipoTrabalhos = new ArrayList<InscricaoTipoTrabalho>();
    
  public InscricaoTipoTrabalhoAvaliador() {
    super();    
  }
}

InscricaoTipoTrabalhoAvaliadorDTO

@Getter
@Setter
@AllArgsConstructor
public class InscricaoTipoTrabalhoAvaliadorDTO {

  private AvaliadorEvento avaliadorEvento;
  
  private List<InscricaoTipoTrabalhoAvaliador> trabalhos;
  
}

假设 List<InscricaoTipoTrabalhoAvaliador> jobs,以下应该有效:

Map<AvaliadorEvento, List<InscricaoTipoTrabalhoAvaliador>> grouped =
  jobs.stream().collect(Collectors.groupingBy(InscricaoTipoTrabalhoAvaliador::getAvaliadorEvento));

假设您有一个同时使用 AvaliadorEventoList<InscricaoTipoTrabalhoAvaliador> 的构造函数,您可以使用此映射轻松创建 InscricaoTipoTrabalhoAvaliadorDTO

List<InscricaoTipoTrabalhoAvaliadorDTO> dtos = grouped.entrySet().stream()
  .map(entry -> new InscricaoTipoTrabalhoAvaliadorDTO(entry.getKey(), entry.getValue()))
  .collect(Collectors.toList());