我获得了对象列表List<APIObjects> apiObjectList
作为我的API的输入(通过HTTP-Post),我需要将此输入列表与我通过执行{{1}得到的实体对象列表进行比较} repository.findAll()
框架
当前,我循环Spring-boot-data-JPA
,然后查找是否存在匹配项。以下是我的代码
List<DatabaseObject>
但是,这种循环似乎要消耗大量的时间和内存,如何用Lambda函数解决呢?我很确定上面显示的当前方法(DatabaseObject的循环)不是解决该问题的正确方法或专业方法
APIObject.java
public Boolean findIfAllAPIobjectsExist (List<APIObject> apiObjects) {
List<DatabaseObject> databaseObjectsList = databaseRepository.findAll()
return apiObjects.stream().allMatch {
apiObject -> {
for (DatabaseObject dbObject : databaseObjectsList) {
if ((dbObject.getGroupId().trim().equals(dbObject.getGroupId().trim())) &&
(dbObject.getArtifactId().trim() .equals(dbObject.getArtifactId().trim())) &&
(dbObject.getVersion().trim().equals(dbObject.getVersion().trim()))) {
System.out.println("Matching ..");
return true;
}
}
return false;
}
}
}
}
DatabaseObject.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class APIObject{
private String groupId;
private String artifactId;
private String version;
}
答案 0 :(得分:2)
我将覆盖两个拥有三个属性equals
的实体中的hashCode
和groupId, artifactId, version
,然后根据三个arrbutbuts对两个List进行排序,并仅使用{{1} },以确定两个列表是否相等:
.equals
使用龙目岛,您可以使用:
databaseObjectsList.sort(
Comparator.comparing(DatabaseObject::getGroupId)
.thenComparing(DatabaseObject::getArtifactId)
.thenComparing(DatabaseObject::getVersion)
);
apiObjects.sort(Comparator.comparing(APIObject::getGroupId)
.thenComparing(APIObject::getArtifactId)
.thenComparing(APIObject::getVersion)
);
return databaseObjectsList.equals(apiObjects);