import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
    public static void main(String[] args) {
// prepare Set to search in
        final int searchVal = 0x21ffff;
        final int setMin = 0x0;
        final int setMax = 0xffff;
        final var searchSet = IntStream.concat(
                        IntStream.rangeClosed(setMin, setMax),
                        IntStream.of(searchVal))
                .boxed().collect(Collectors.toUnmodifiableSet()); // <--- or Collectors.toSet()

// search (end - start) times in searchSet for searchVal
// take System.nanoTime();
        final int start = 2_200_000;
        final int end = 2_300_000;
        long startTime = System.nanoTime();

        IntStream.range(start, end).forEach((val) -> {
// case I

            if (searchSet.contains(val)) {
                System.out.println("---> found (case I)");
            }
        });
        System.out.println(TimeUnit.NANOSECONDS.toMillis(System.nanoTime()-startTime)+" milliseconds");

        startTime = System.nanoTime();
        IntStream.range(start, end).forEach((val) -> {

            if (searchSet.contains(searchVal)) {
                if (val == searchVal) {
                    System.out.println("---> found (case II)");
                }
            }

        });
        System.out.println(TimeUnit.NANOSECONDS.toMillis(System.nanoTime()-startTime)+" milliseconds");
    }
}