35 lines
981 B
Java
35 lines
981 B
Java
package de.ph87.home.common.crud;
|
|
|
|
import jakarta.annotation.Nullable;
|
|
import lombok.NonNull;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import java.util.stream.Stream;
|
|
|
|
public interface ISearch {
|
|
|
|
@Nullable
|
|
String getSearch();
|
|
|
|
default boolean search(@NonNull final String... fields) {
|
|
final String term = getSearch();
|
|
if (term == null) {
|
|
return true;
|
|
}
|
|
final List<String> haystack = Arrays.stream(fields).map(String::toString).map(String::toLowerCase).toList();
|
|
return splitWords(term).allMatch(word -> anyMatch(word, haystack));
|
|
}
|
|
|
|
@NonNull
|
|
default Stream<String> splitWords(@NonNull final String term) {
|
|
return Arrays.stream(term.toLowerCase(Locale.ROOT).replaceAll("^\\s|\\s$", "").split("\\s+"));
|
|
}
|
|
|
|
default boolean anyMatch(@NonNull final String needle, @NonNull final List<String> haystack) {
|
|
return haystack.stream().anyMatch(lowerCaseHayStack -> lowerCaseHayStack.contains(needle));
|
|
}
|
|
|
|
}
|