I want a list of requests that do not include any duplicate services.
@lombok.Value
@lombok.Builder(toBuilder = true, builderClassName = "Builder")
@lombok.NoArgsConstructor(force = true, access = lombok.AccessLevel.PRIVATE)
@lombok.AllArgsConstructor(access = lombok.AccessLevel.PRIVATE)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@Document(collection = "provisioning")
public class SonarQubeProvisioning implements Identifiable<ObjectId> {
private List <SonarQubeService> service;
}
List<SonarQubeProvisioning> provisions = provisioningRepository.findByStatus(QUEUED);
//Remove Provisions that include a service that is currenlty being processed
List<SonarQubeProvisioning> result = provisions.stream()
.filter(provision ->
provisioningRepository.findByServiceIdAndStatus(provision.getService().getId(), IN_PROGRESS).isEmpty())
.collect(Collectors.toList());
//Get list of duplicates services
Set<SonarQubeService> allItems = new HashSet<SonarQubeService>();
Set<SonarQubeService> duplicates = result.stream().map(provision -> provision.getService())
.filter(n -> !allItems.add(n)) //Set.add() returns false if the item was already in the set.
.collect(Collectors.toSet());
//Remove first duplicate request
duplicates.forEach(service -> {
IntStream.range(0, result.size())
.filter(i -> result.get(i).getService().equals(service))
.boxed()
.findFirst()
.map(i -> result.remove((int) i));
});
No comments:
Post a Comment