import java.util.function.Consumer; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; import org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SearchService { private static final Logger logger = LoggerFactory.getLogger(SearchService.class); private static final ObjectMapper objectMapper = new ObjectMapper(); private static final OkHttpClient HTTP_CLIENT = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build(); private static final String SEARCH_API_URL = "https://example.com/search?q="; public static void main(String[] args) { Textbox searchBox = new Textbox(); searchBox.setOnInputChanged(debounceSearch); } public static void performSearch(String query) { if (StringUtils.isBlank(query)) { logger.info("Empty query, skipping search."); return; } String url = SEARCH_API_URL + query; Request request = new Request.Builder() .url(url) .build(); Call call = HTTP_CLIENT.newCall(request); try { Response response = call.execute(); ResponseBody responseBody = response.body(); if (response.isSuccessful() && responseBody != null) { SearchResult result = objectMapper.readValue(responseBody.string(), SearchResult.class); processSearchResult(result); } else { logger.error("Search request failed with status code: {}", response.code()); } } catch (Exception e) { logger.error("Search request failed: {}", e.getMessage(), e); } } private static void processSearchResult(SearchResult result) { // ... } public static <T> Consumer<T> debounce(Consumer<T> consumer, int delayInMillis) { return new Consumer<T>() { private long lastExecutionTime = System.currentTimeMillis(); @Override public void accept(T t) { long currentTime = System.currentTimeMillis(); if (currentTime - lastExecutionTime >= delayInMillis) { consumer.accept(t); lastExecutionTime = currentTime; } } }; } private static class SearchResult { // ... } private static class Textbox { private Consumer<String> onInputChanged; public void setOnInputChanged(Consumer<String> onInputChanged) { this.onInputChanged = onInputChanged; } public void handleChange(String input) { onInputChanged.accept(input); } } }


上一篇:
下一篇:
切换中文