gpt4 book ai didi

java - 比较输入列表与存储库对象列表 : Loop execution takes more time

转载 作者:行者123 更新时间:2023-11-30 02:00:31 27 4
gpt4 key购买 nike

我得到一个对象列表 List<APIObjects> apiObjectList作为我的 API 的输入(通过 HTTP-Post),我需要将此输入列表与我通过执行 repository.findAll() 获得的实体对象列表进行比较与 Spring-boot-data-JPA框架

目前我循环播放List<DatabaseObject>然后查找是否有匹配项。下面是我的代码

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;
}
}

}

}

但是这个循环似乎消耗了大量的时间和内存,如何用 Lambda 函数来解决这个问题?我非常确定上面显示的我当前的方法(DatabaseObject 的循环)不是解决该问题的正确或专业的方法

APIObject.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class APIObject{
private String groupId;
private String artifactId;
private String version;
}

DatabaseObject.java

@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;
}

最佳答案

我将覆盖两个实体中的equalshashCode,它们包含三个属性groupId、artifactId、version,然后对两个列表进行排序基于这三个属性,只需使用 .equals 来确定两个 List 是否相等:

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 {..}

关于java - 比较输入列表与存储库对象列表 : Loop execution takes more time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com