Skip to content

Instantly share code, notes, and snippets.

@DanielRamosAcosta
Created November 26, 2019 02:12
Show Gist options
  • Save DanielRamosAcosta/c395cf199013b48fa795406e0a7b62cf to your computer and use it in GitHub Desktop.
Save DanielRamosAcosta/c395cf199013b48fa795406e0a7b62cf to your computer and use it in GitHub Desktop.
package com.acidtango.javaboilerplate;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Predicate;
public class IpValidator {
@NotNull
@Contract(pure = true)
private static Optional<Integer> parseInt (@NotNull String number) {
try {
Integer parsedNumber = Integer.parseInt(number);
if (parsedNumber.toString().length() != number.length()) {
return Optional.empty();
}
return Optional.of(parsedNumber);
} catch(NumberFormatException | NullPointerException e) {
return Optional.empty();
}
}
@NotNull
@Contract(pure = true)
private static Predicate<Integer> isLessOrEqualThan(@NotNull Integer b) {
return a -> a <= b;
}
@NotNull
@Contract(pure = true)
private static Predicate<Integer> isGreaterOrEqualThan(@NotNull Integer b) {
return a -> a >= b;
}
@NotNull
@Contract(pure = true)
public static Boolean isValid(@NotNull String ip) {
var validDigitsCount = Arrays.stream(ip.split("\\."))
.map(IpValidator::parseInt)
.filter(Optional::isPresent)
.map(Optional::get)
.filter(isLessOrEqualThan(255))
.filter(isGreaterOrEqualThan(0))
.count();
return validDigitsCount == 4;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment