Java 如何在多个属性上获取列表的不同计数?

Java 如何在多个属性上获取列表的不同计数?,java,java-8,Java,Java 8,我正在尝试保存管理员列表,我需要验证唯一的用户名和电子邮件地址。首先,我需要在我的请求DTO列表中验证该条件,然后使用已经保存在数据库中的列表再次逐个检查 我用distinct once检查了RequestDTO的用户名和电子邮件地址。然后,我再次检查了数据库。通过这种方式,将执行多个循环 我已经提到了以下方法: public void saveAdmin(列出adminRequestDTO){ validateAdminRequestDTO.accept(adminRequestDTO)

我正在尝试保存管理员列表,我需要验证唯一的用户名和电子邮件地址。首先,我需要在我的请求DTO列表中验证该条件,然后使用已经保存在数据库中的列表再次逐个检查

我用distinct once检查了RequestDTO的用户名和电子邮件地址。然后,我再次检查了数据库。通过这种方式,将执行多个循环

我已经提到了以下方法:

public void saveAdmin(列出adminRequestDTO){
validateAdminRequestDTO.accept(adminRequestDTO);
List admin=adminRequestDTO.stream().map(requestDTO->{
/*检查数据库中REQUESTDTO中的用户名和电子邮件地址是否存在,ID是否存在,然后引发异常*/
/*否则转换*/
Admin admin1=新管理员();
admin1.setUsername(requestDTO.getUsername());
/*设置其他请求DTO*/
返回admin1;
}).collect(Collectors.toList());
/*保存管理员*/
adminRepository.saveAll(admin);
}
public Consumer validateAdminRequestDTO=(requestDTO)->{
布尔值checkIfRequestHaveSameUsername=requestDTO.stream().map(AdminRequestDTO::getUsername)
.distinct().count()
public Consumer validateAdmin=(requestDTO)->{
如果(!Objects.isNull(adminRepository.getAdminByUsername(requestDTO.getUsername()));
抛出新的DataReplicationException(“管理员用户名已存在”,“管理员用户名已存在”);
/*电子邮件地址也是如此*/
};
我想重构现有代码,以便减少多个循环

abcabc@f1soft.com , xyzxyz@f1soft.com->允许

abcabc@f1soft.com, abcxyz@f1soft.com->不允许

abcabc@f1soft.com, xyzabc@f1soft.com->不允许


(第一个是用户名,第二个是电子邮件地址)

您不应该让Java代码完成数据库的工作。除此之外,当您参考现有的Q&A时,您还应该解释为什么您认为它们不能解决您的问题。您不应该让Java代码完成数据库的工作。除此之外,当你提到现有的Q&A时,你还应该解释为什么你认为它们不能解决你的问题。
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "This is admin request class")
public class AdminRequestDTO implements Serializable {

    @ApiModelProperty(value = "This is the id of admin")
    private Long id;

    @ApiModelProperty(value = "This is the username of admin")
    private String username;

    @ApiModelProperty(value = "This is full name of admin")
    private String fullName;

    @ApiModelProperty(value = "This is the email address of admin")
    private String emailAddress;


    @ApiModelProperty(value = "This is the status of admin")
    private Character status;
}
@Entity
@Getter
@Setter
@Table(name = "admin")
public class Admin implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(name = "username")
  private String username;

  @Column(name = "fullname")
  private String fullName;

  @Column(name = "password")
  private String password;

  @Column(name = "email_address", length = 200)
  private String emailAddress;
}
public void saveAdmin(List<AdminRequestDTO> adminRequestDTO) {

    validateAdminRequestDTO.accept(adminRequestDTO);

    List<Admin> admin = adminRequestDTO.stream().map(requestDTO -> {

        /*CHECK IF USERNAME AND EMAIL ADDRESS IN REQUESTDTO EXISTS IN DATABASE, ID IT DOES, THEN THROW EXCEPTION*/
/*ELSE CONVERT */

        Admin admin1 = new Admin();
        admin1.setUsername(requestDTO.getUsername());
        /*SET OTHER REQUEST DTOS*/
        return admin1;
    }).collect(Collectors.toList());

    /*SAVE ADMIN*/
    adminRepository.saveAll(admin);
}
  public Consumer<List<AdminRequestDTO>> validateAdminRequestDTO = (requestDTO) -> {

        boolean checkIfRequestHaveSameUsername = requestDTO.stream().map(AdminRequestDTO::getUsername)
                .distinct().count() < requestDTO.size();

        boolean checkIfRequestHaveSameEmailAddress = requestDTO.stream().map(AdminRequestDTO::getEmailAddress)
                .distinct().count() < requestDTO.size();

        if (checkIfRequestHaveSameUsername)
            throw new DataDuplicationException(AdminMessageConstants.DUPLICATE_USERNAME_MESSAGE,
                    AdminMessageConstants.DUPLICATE_USERNAME_DEVELOPER_MESSAGE);

        if (checkIfRequestHaveSameEmailAddress)
            throw new DataDuplicationException(AdminMessageConstants.DUPLICATE_EMAILADDRESS_MESSAGE,
                    AdminMessageConstants.DUPLICATE_EMAILADDRESS_DEVELOPER_MESSAGE);
    };

 public Consumer<AdminRequestDTO> validateAdmin = (requestDTO) -> {
        if (!Objects.isNull(adminRepository.getAdminByUsername(requestDTO.getUsername()))) ;
        throw new DataDuplicationException("Admin username already exits", "Admin username already exits");

            /*SIMILARLY FOR EMAIL ADDRESS*/
    };