在 * 构建 * 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
,但是出现了这个错误。我已经研究了一些新的信息,但是没有运气。
提前谢谢你的帮助。
1条答案
按热度按时间zdwk9cvp1#
在过滤器的lambda表达式中,您可以如下表示参数类型:
但这里真的不需要。
不针对这个问题,这里还有另外两点需要解决:
projectRepository.findAll()
然后过滤id是一种资源浪费,您将在内存中加载该表中的所有行,然后丢弃除一行之外的所有行。您的ProjectRepository
接口可能有一个findById
方法来满足您的需要Long
对象之间的比较project.getId() == projectId
需要使用equalsproject.getId().equals(projectId)
表示。如果long
基元类型不是对象,则可以使用==
。