Java 比较输入列表和存储库对象列表:循环执行需要更多时间
我得到一个对象列表Java 比较输入列表和存储库对象列表:循环执行需要更多时间,java,hibernate,java-8,spring-data-jpa,java-stream,Java,Hibernate,Java 8,Spring Data Jpa,Java Stream,我得到一个对象列表List apiObjectList作为我的API的输入(通过HTTP Post),我需要将这个输入列表与我通过执行repository.findAll()和Spring boot data JPAframework得到的实体对象列表进行比较 目前,我循环列表,然后查找是否存在匹配项。下面是我的代码 public Boolean findIfAllAPIobjectsExist (List<APIObject> apiObjects) { List<D
List apiObjectList
作为我的API的输入(通过HTTP Post),我需要将这个输入列表与我通过执行repository.findAll()
和Spring boot data JPA
framework得到的实体对象列表进行比较
目前,我循环列表
,然后查找是否存在匹配项。下面是我的代码
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;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "my_table")
public class DatabaseObject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column(name = "name")
String name;
@Column(name = "group_id")
String groupId;
@Column(name = "artifact_id")
String artifactId;
@Column(name = "version")
String version;
}
我会在我的两个实体中覆盖
equals
和hashCode
,这两个实体拥有三个属性groupId、artifactId、version
,然后根据这三个属性对两个列表进行排序,只需使用.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);
使用lombok,您可以使用:
@EqualsAndHashCode(of = {"groupId", "artifactId", "version"})
class DatabaseObject {..}
检查这一条-是否有
hibernate
或spring-data-jpa
解决方法?可能在query中有一个hibernate
或spring-data-jpa
解决这个问题的方法吗?可能在query@Arun我真的不知道,在hibernate或spring data jpa中是否有类似的方法,但您也许可以找到解决方案,如果您找到了,我就在这里:)