Home4/src/main/java/de/ph87/home/common/crud/ISearch.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));
}
}