/** * Count the number of set bits (population counting) of value stored at {@literal key} between {@literal start} and * {@literal end}. * * @param key must not be {@literal null}. * @param start * @param end * @return * @see <a href="http://redis.io/commands/bitcount">Redis Documentation: BITCOUNT</a> */ default Mono<Long> bitCount(ByteBuffer key, long start, long end) { Assert.notNull(key, "Key must not be null!"); return bitCount(Mono.just(BitCountCommand.bitCount(key).within(new Range<>(start, end)))).next() .map(NumericResponse::getOutput); }
/** * Creates a new {@link Range} with the given lower and upper bound. * * @param lowerBound must not be {@literal null}. * @param upperBound must not be {@literal null}. * @since 2.0 */ public static <T extends Comparable<T>> Range<T> of(Bound<T> lowerBound, Bound<T> upperBound) { return new Range<>(lowerBound, upperBound); }
/** * Create a {@link Range} given the upper {@link Bound}. * * @param upper must not be {@literal null}. * @return */ public Range<T> to(Bound<T> upper) { Assert.notNull(upper, "Upper bound must not be null!"); return new Range<>(lower, upper); } }
/** * Count the number of set bits (population counting) of value stored at {@literal key} between {@literal start} and * {@literal end}. * * @param key must not be {@literal null}. * @param start * @param end * @return * @see <a href="http://redis.io/commands/bitcount">Redis Documentation: BITCOUNT</a> */ default Mono<Long> bitCount(ByteBuffer key, long start, long end) { Assert.notNull(key, "Key must not be null!"); return bitCount(Mono.just(BitCountCommand.bitCount(key).within(new Range<>(start, end)))).next() .map(NumericResponse::getOutput); }
/** * Count the number of set bits (population counting) of value stored at {@literal key} between {@literal start} and * {@literal end}. * * @param key must not be {@literal null}. * @param start * @param end * @return * @see <a href="http://redis.io/commands/bitcount">Redis Documentation: BITCOUNT</a> */ default Mono<Long> bitCount(ByteBuffer key, long start, long end) { Assert.notNull(key, "Key must not be null!"); return bitCount(Mono.just(BitCountCommand.bitCount(key).within(new Range<>(start, end)))).next() .map(NumericResponse::getOutput); }
@Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { RangeParam rangeParam = parameter.getParameterAnnotation(RangeParam.class); String parameterValue = rangeParam.value(); String value = webRequest.getParameter(parameterValue); if (Strings.isNullOrEmpty(value)) { return null; } String split = rangeParam.split(); if (!StringUtils.contains(value, split)) { return null; } String[] rangeValues = StringUtils.splitByWholeSeparator(value, split, 2); @SuppressWarnings("unchecked") Class<T> elementClass = (Class<T>)rangeParam.elementClass(); return new Range<>(conversionService.convert(rangeValues[0], elementClass), conversionService.convert(rangeValues[1], elementClass)); }