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中是否有类似的方法,但您也许可以找到解决方案,如果您找到了,我就在这里:)