Skip to content

Các Java snippets có thể tái sử dụng

Dưới đây là một bộ sưu tập các reusable Java code snippets — dễ dùng, dễ bảo trì, và có thể tái sử dụng trong nhiều ứng dụng Java (đặc biệt hữu ích cho Spring Boot, microservices, hoặc utilities):

 

1. Centralized Validator

public class Validator {
    public static void requireNonNull(Object value, String fieldName) {
        if (value == null) {
            throw new IllegalArgumentException(fieldName + " must not be null.");
        }
    }

    public static void requireNonEmpty(String value, String fieldName) {
        if (value == null || value.trim().isEmpty()) {
            throw new IllegalArgumentException(fieldName + " must not be empty.");
        }
    }
}

 

2. Enum Parser (Safe)

public class EnumUtils {
    public static <T extends Enum<T>> Optional<T> parseEnum(Class<T> enumType, String name) {
        try {
            return Optional.of(Enum.valueOf(enumType, name.toUpperCase()));
        } catch (Exception e) {
            return Optional.empty();
        }
    }
}

 

3. Date Formatter

public class DateUtil {
    public static String format(LocalDateTime dateTime, String pattern) {
        return dateTime.format(DateTimeFormatter.ofPattern(pattern));
    }

    public static LocalDateTime parse(String dateStr, String pattern) {
        return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
    }
}

 

4. HTTP Client (GET wrapper with RestTemplate)

public class HttpClient {
    private static final RestTemplate restTemplate = new RestTemplate();

    public static <T> T get(String url, Class<T> responseType) {
        return restTemplate.getForObject(url, responseType);
    }

    private static final HttpClient client = HttpClient.newHttpClient();

    public static String get(String url) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .GET()
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    }
}

 

5. JSON Mapper (using Jackson)

public class JsonUtil {
    private static final ObjectMapper mapper = new ObjectMapper();

    public static String toJson(Object obj) {
        try {
            return mapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("Failed to convert to JSON", e);
        }
    }

    public static <T> T fromJson(String json, Class<T> clazz) {
        try {
            return mapper.readValue(json, clazz);
        } catch (IOException e) {
            throw new RuntimeException("Failed to parse JSON", e);
        }
    }
}

 

6. Result Wrapper

public class Result<T> {
    private boolean success;
    private String message;
    private T data;

    public static <T> Result<T> ok(T data) {
        Result<T> result = new Result<>();
        result.success = true;
        result.data = data;
        return result;
    }

    public static <T> Result<T> fail(String message) {
        Result<T> result = new Result<>();
        result.success = false;
        result.message = message;
        return result;
    }
}

 

7. Password Hasher (BCrypt)

public class PasswordUtil {
    private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

    public static String hash(String password) {
        return encoder.encode(password);
    }

    public static boolean matches(String rawPassword, String hashedPassword) {
        return encoder.matches(rawPassword, hashedPassword);
    }
}

 

8. Safe String Utils

public class StringUtils {
    public static boolean isBlank(String str) {
        return str == null || str.trim().isEmpty();
    }

    public static String safe(String str) {
        return str != null ? str : "";
    }
}

 

9. List-to-Map Converter

public class CollectionUtil {
    public static <K, V> Map<K, V> toMap(List<V> list, Function<V, K> keyMapper) {
        return list.stream().collect(Collectors.toMap(keyMapper, Function.identity()));
    }
}

 

10. Thread Sleep Utility

public class SleepUtil {
    public static void sleepSilently(long millis) {
        try {
            Thread.sleep(millis);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt(); // best practice
        }
    }
}

 

11. List Cleaner

public class ListCleaner {
    public static List<String> clean(List<String> input) {
        return input.stream()
                .filter(Objects::nonNull)
                .map(String::trim)
                .filter(s -> !s.isEmpty())
                .distinct()
                .toList();
    }
}

 

12. File Reader

public class FileUtil {
    public static String readAsString(String path) throws IOException {
        return Files.readString(Paths.get(path));
    }
}

 

13. Timer / Execution Logger

public class Timer {
    public static void measure(String label, Runnable task) {
        long start = System.currentTimeMillis();
        task.run();
        long duration = System.currentTimeMillis() - start;
        System.out.println(label + " took " + duration + "ms");
    }
}

 

14. Email Validator

public class EmailValidator {
    private static final Pattern EMAIL_PATTERN = Pattern.compile("^[\\w.-]+@[\\w.-]+\\.[a-zA-Z]{2,6}$");

    public static boolean isValid(String email) {
        return email != null && EMAIL_PATTERN.matcher(email).matches();
    }
}

 

15. Simple In-Memory Cache

public class SimpleCache<K, V> {
    private final ConcurrentHashMap<K, V> cache = new ConcurrentHashMap<>();

    public V getOrCompute(K key, Function<K, V> loader) {
        return cache.computeIfAbsent(key, loader);
    }
}
Published inAll

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *