如何解决该问题:“java:不兼容的类型:...项目无法转换为java.util.函数, predicate 〈?super ...Project>"?

j91ykkif  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(496)

在 * 构建 * project的过程中,我不断收到以下问题:

java: incompatible types: com.test.application.data.models.Project cannot be converted to java.util.function.Predicate<? super com.test.application.data.models.Project>

我有以下实体类:

@Data
@Builder
@AllArgsConstructor 
@NoArgsConstructor 
@Entity(name = "project_entity") 
@Table(name = "projects") 
public class Project {

public Project(ProjectDTO projectDTO) { 
   this.name = projectDTO.getName(); 
   this.abbreviation = projectDTO.getAbbreviation(); 
   this.customer = projectDTO.getCustomer();
}

  @Id 
  @GeneratedValue(strategy = GenerationType.IDENTITY) 
  @Column(name = "project_id") 
  private Integer id;

  private String name;

  private String abbreviation;

  private String customer; 
}

我有service实现:

@Service
public class ProjectServiceImpl implements ProjectService {
  @Autowired 
  private ProjectRepository projectRepository;   
  
  @Autowired 
  private ProjectAdaptor projectAdaptor;  

  @Override 
  public List<Project> getAllProjects(Long projectId) { 
    return projectRepository.findAll().stream().filter(((Project) project -> 
project.getId() == projectId)) .findAny().orElse(null);
  }
  
  @Override 
  public Project save(Project project) {  
     return projectRepository.save(project);    
  }  

  @Override 
  public List<ProjectDTO> findAllProducts() { 
  List<Project> project = projectRepository.findAll(); 
    return projectAdaptor.databaseModelToUiDtoList(project);    
  }
}

基于此,我的问题是如何解决以下相关问题:

java: incompatible types: com.test.application.data.models.Project cannot be converted to java.util.function.Predicate<? super com.test.application.data.models.Project>


如果有用的话,我愿意提供更多细节。
我试图在重建项目时获取一个id,但是出现了这个错误。我已经研究了一些新的信息,但是没有运气。
提前谢谢你的帮助。

zdwk9cvp

zdwk9cvp1#

在过滤器的lambda表达式中,您可以如下表示参数类型:

(Project project) -> ....

但这里真的不需要。
不针对这个问题,这里还有另外两点需要解决:

  • 执行projectRepository.findAll()然后过滤id是一种资源浪费,您将在内存中加载该表中的所有行,然后丢弃除一行之外的所有行。您的ProjectRepository接口可能有一个findById方法来满足您的需要
  • 两个Long对象之间的比较project.getId() == projectId需要使用equals project.getId().equals(projectId)表示。如果long基元类型不是对象,则可以使用==

相关问题