CavalliumDBEngine/src/main/java/it/cavallium/dbengine/client/SearchResultKeys.java

41 lines
1.1 KiB
Java
Raw Normal View History

2021-02-03 20:13:17 +01:00
package it.cavallium.dbengine.client;
import it.cavallium.dbengine.database.collections.Joiner.ValueGetter;
2021-03-03 15:03:25 +01:00
import lombok.EqualsAndHashCode;
import lombok.ToString;
2021-02-03 20:13:17 +01:00
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
2021-03-03 15:03:25 +01:00
@EqualsAndHashCode
@ToString
2021-02-03 20:13:17 +01:00
public class SearchResultKeys<T> {
2021-03-03 15:03:25 +01:00
private final Flux<LuceneSignal<SearchResultKey<T>>> results;
2021-02-03 20:13:17 +01:00
2021-03-03 15:03:25 +01:00
public SearchResultKeys(Flux<LuceneSignal<SearchResultKey<T>>> results) {
2021-02-03 20:13:17 +01:00
this.results = results;
}
public static <T, U> SearchResultKeys<T> empty() {
2021-03-03 15:03:25 +01:00
return new SearchResultKeys<>(Flux.just(LuceneSignal.totalHitsCount(0L)));
2021-02-03 20:13:17 +01:00
}
2021-03-03 15:03:25 +01:00
public Flux<LuceneSignal<SearchResultKey<T>>> results() {
2021-02-03 20:13:17 +01:00
return this.results;
}
public <U> SearchResult<T, U> withValues(ValueGetter<T, U> valuesGetter) {
2021-03-03 15:03:25 +01:00
return new SearchResult<>(
results.flatMapSequential(item -> {
if (item.isValue()) {
return valuesGetter
.get(item.getValue().getKey())
.map(value -> LuceneSignal.value(new SearchResultItem<>(item.getValue().getKey(), value, item.getValue().getScore())));
} else {
return Mono.just(item.mapTotalHitsCount());
}
})
2021-02-03 20:13:17 +01:00
);
}
}