com.hazelcast.aggregation.Aggregators Maven / Gradle / Ivy
/*
* Copyright (c) 2008-2021, Hazelcast, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hazelcast.aggregation;
import com.hazelcast.aggregation.impl.BigDecimalAverageAggregator;
import com.hazelcast.aggregation.impl.BigDecimalSumAggregator;
import com.hazelcast.aggregation.impl.BigIntegerAverageAggregator;
import com.hazelcast.aggregation.impl.BigIntegerSumAggregator;
import com.hazelcast.aggregation.impl.CountAggregator;
import com.hazelcast.aggregation.impl.DistinctValuesAggregator;
import com.hazelcast.aggregation.impl.DoubleAverageAggregator;
import com.hazelcast.aggregation.impl.DoubleSumAggregator;
import com.hazelcast.aggregation.impl.FixedSumAggregator;
import com.hazelcast.aggregation.impl.FloatingPointSumAggregator;
import com.hazelcast.aggregation.impl.IntegerAverageAggregator;
import com.hazelcast.aggregation.impl.IntegerSumAggregator;
import com.hazelcast.aggregation.impl.LongAverageAggregator;
import com.hazelcast.aggregation.impl.LongSumAggregator;
import com.hazelcast.aggregation.impl.MaxAggregator;
import com.hazelcast.aggregation.impl.MaxByAggregator;
import com.hazelcast.aggregation.impl.MinAggregator;
import com.hazelcast.aggregation.impl.MinByAggregator;
import com.hazelcast.aggregation.impl.NumberAverageAggregator;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Set;
/**
* A utility class to create basic {@link com.hazelcast.aggregation.Aggregator} instances.
*
* Min/Max/Average aggregators are type specific, so an integerAvg() aggregator expects all elements to be integers.
* There is no conversion executed while accumulating, so if there is any other type met an exception will be thrown.
*
* In order to operate on a generic Number type use the fixedPointSum(), floatingPointSum() and numberAvg() aggregators.
* All of them will convert the given number to either Long or Double during the accumulation phase.
* It will result in a lot of allocations since each number has to be converted, but it enables the user
* to operate on the whole family of numbers. It is especially useful if the numbers given to the aggregators
* may not be of one type only.
*
* The attributePath given in the factory method allows the aggregator to operate on the value extracted by navigating
* to the given attributePath on each object that has been returned from a query.
* The attribute path may be simple, e.g. "name", or nested "address.city".
*
* If an aggregator does not accept null values pass a predicate to the aggregate call that will filter them out.
*
* If the input value or the extracted value is a collection it won't be "unfolded" - so for example
* count aggregation on "person.postalCodes" will return 1 for each input object and not the size of the collection.
* In order to calculate the size of the collection use the [any] operator, e.g. "person.postalCodes[any]".
*
* @since 3.8
*/
@SuppressWarnings({"checkstyle:methodcount", "checkstyle:classdataabstractioncoupling"})
public final class Aggregators {
private Aggregators() {
}
/**
* @param type of the input object.
* @return an aggregator that counts the input values.
* Accepts nulls as input values.
* Aggregation result type Long.
*/
public static Aggregator count() {
return new CountAggregator();
}
/**
* @param type of the input object.
* @return an aggregator that counts the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Aggregation result type Long.
*/
public static Aggregator count(String attributePath) {
return new CountAggregator(attributePath);
}
/**
* @param type of the input object.
* @param type of the return object.
* @return an aggregator that calculates the distinct set of input values.
* Accepts null input values.
* Aggregation result type is a Set of R.
*/
public static Aggregator> distinct() {
return new DistinctValuesAggregator<>();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @param type of the return object.
* @return an aggregator that calculates the distinct set of input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Aggregation result type is a Set of R.
*/
public static Aggregator> distinct(String attributePath) {
return new DistinctValuesAggregator<>(attributePath);
}
// ---------------------------------------------------------------------------------------------------------
// average aggregators
// ---------------------------------------------------------------------------------------------------------
/**
* @param type of the input object.
* @return an aggregator that calculates the average of the input values.
* Does NOT accept null input values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalAvg() {
return new BigDecimalAverageAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the average of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalAvg(String attributePath) {
return new BigDecimalAverageAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the average of the input values.
* Does NOT accept null input values.
* Accepts only BigInteger input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigIntegerAvg() {
return new BigIntegerAverageAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the average of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts only BigInteger input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigIntegerAvg(String attributePath) {
return new BigIntegerAverageAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the average of the input values.
* Does NOT accept null input values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleAvg() {
return new DoubleAverageAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the average of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleAvg(String attributePath) {
return new DoubleAverageAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the average of the input values.
* Does NOT accept null input values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator integerAvg() {
return new IntegerAverageAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the average of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator integerAvg(String attributePath) {
return new IntegerAverageAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the average of the input values.
* Does NOT accept null input values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator longAvg() {
return new LongAverageAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the average of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator longAvg(String attributePath) {
return new LongAverageAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the average of the input values.
* Does NOT accept null input values.
* Accepts generic Number input values.
* Aggregation result type is Double.
*/
public static Aggregator numberAvg() {
return new NumberAverageAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the average of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts generic Number input values.
* Aggregation result type is Double.
*/
public static Aggregator numberAvg(String attributePath) {
return new NumberAverageAggregator(attributePath);
}
// ---------------------------------------------------------------------------------------------------------
// max aggregators
// ---------------------------------------------------------------------------------------------------------
/**
* @param type of the input object.
* @return an aggregator that calculates the max of the input values.
* Accepts null input values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalMax() {
return new MaxAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the max of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalMax(String attributePath) {
return new MaxAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the max of the input values.
* Accepts null input values and null extracted values.
* Accepts only BigInteger input values.
* Aggregation result type is BigInteger.
*/
public static Aggregator bigIntegerMax() {
return new MaxAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the max of the input values extracted from the given attributePath.
* Accepts null input values nor null extracted values.
* Accepts only BigInteger input values.
* Aggregation result type is BigInteger.
*/
public static Aggregator bigIntegerMax(String attributePath) {
return new MaxAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the max of the input values.
* Accepts null input values and null extracted values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleMax() {
return new MaxAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the max of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleMax(String attributePath) {
return new MaxAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the max of the input values.
* Accepts null input values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Integer.
*/
public static Aggregator integerMax() {
return new MaxAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the max of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Integer.
*/
public static Aggregator integerMax(String attributePath) {
return new MaxAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the max of the input values.
* Accepts null input values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator longMax() {
return new MaxAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the max of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator longMax(String attributePath) {
return new MaxAggregator(attributePath);
}
/**
* @param type of the input object.
* @param type of the return object (subtype of Comparable)
* @return an aggregator that calculates the max of the input values.
* Accepts null input values.
* Accepts generic Comparable input values.
* Aggregation result type is R.
*/
public static Aggregator comparableMax() {
return new MaxAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @param type of the return object (subtype of Comparable)
* @return an aggregator that calculates the max of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts generic Comparable input values.
* Aggregation result type is R.
*/
public static Aggregator comparableMax(String attributePath) {
return new MaxAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the max of the input values extracted from the given attributePath
* and returns the input item containing the maximum value. If multiple items contain the maximum value,
* any of them is returned.
* Accepts null input values and null extracted values.
* Accepts generic Comparable input values.
*/
public static Aggregator maxBy(String attributePath) {
return new MaxByAggregator(attributePath);
}
// ---------------------------------------------------------------------------------------------------------
// min aggregators
// ---------------------------------------------------------------------------------------------------------
/**
* @param type of the input object.
* @return an aggregator that calculates the min of the input values.
* Accepts null input values and null extracted values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalMin() {
return new MinAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the min of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalMin(String attributePath) {
return new MinAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the min of the input values.
* Accepts null input values and null extracted values.
* Accepts only BigInteger input values.
* Aggregation result type is BigInteger.
*/
public static Aggregator bigIntegerMin() {
return new MinAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the min of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only BigInteger input values.
* Aggregation result type is BigInteger.
*/
public static Aggregator bigIntegerMin(String attributePath) {
return new MinAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the min of the input values.
* Accepts null input values and null extracted values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleMin() {
return new MinAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the min of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleMin(String attributePath) {
return new MinAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the min of the input values.
* Accepts null input values and null extracted values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Integer.
*/
public static Aggregator integerMin() {
return new MinAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the min of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Integer.
*/
public static Aggregator integerMin(String attributePath) {
return new MinAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the min of the input values.
* Accepts null input values and null extracted values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator longMin() {
return new MinAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the min of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator longMin(String attributePath) {
return new MinAggregator(attributePath);
}
/**
* @param type of the input object.
* @param type of the return object (subtype of Comparable)
* @return an aggregator that calculates the min of the input values.
* Accepts null input values.
* Accepts generic Comparable input values.
* Aggregation result type is R.
*/
public static Aggregator comparableMin() {
return new MinAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @param type of the return object (subtype of Comparable)
* @return an aggregator that calculates the min of the input values extracted from the given attributePath.
* Accepts null input values and null extracted values.
* Accepts generic Comparable input values.
* Aggregation result type is R.
*/
public static Aggregator comparableMin(String attributePath) {
return new MinAggregator(attributePath);
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the min of the input values extracted from the given attributePath
* and returns the input item containing the minimum value. If multiple items contain the minimum value,
* any of them is returned.
* Accepts null input values and null extracted values.
* Accepts generic Comparable input values.
*/
public static Aggregator minBy(String attributePath) {
return new MinByAggregator(attributePath);
}
// ---------------------------------------------------------------------------------------------------------
// sum aggregators
// ---------------------------------------------------------------------------------------------------------
/**
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values.
* Does NOT accept null input values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalSum() {
return new BigDecimalSumAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts only BigDecimal input values.
* Aggregation result type is BigDecimal.
*/
public static Aggregator bigDecimalSum(String attributePath) {
return new BigDecimalSumAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values.
* Does NOT accept null input values.
* Accepts only BigInteger input values.
* Aggregation result type is BigInteger.
*/
public static Aggregator bigIntegerSum() {
return new BigIntegerSumAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values extracted from the given attributePath.
* Does NOT accept null input values nor null extracted values.
* Accepts only BigInteger input values.
* Aggregation result type is BigInteger.
*/
public static Aggregator bigIntegerSum(String attributePath) {
return new BigIntegerSumAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values.
* Does NOT accept null input values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleSum() {
return new DoubleSumAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values extracted from the given attributePath.
* Does NOT accept null input values.
* Accepts only Double input values (primitive and boxed).
* Aggregation result type is Double.
*/
public static Aggregator doubleSum(String attributePath) {
return new DoubleSumAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values.
* Does NOT accept null input values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator integerSum() {
return new IntegerSumAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values extracted from the given attributePath.
* Does NOT accept null input values.
* Accepts only Integer input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator integerSum(String attributePath) {
return new IntegerSumAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values.
* Does NOT accept null input values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator longSum() {
return new LongSumAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values extracted from the given attributePath.
* Does NOT accept null input values.
* Accepts only Long input values (primitive and boxed).
* Aggregation result type is Long.
*/
public static Aggregator longSum(String attributePath) {
return new LongSumAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values.
* Does NOT accept null input values.
* Accepts generic Number input values.
* Aggregation result type is Long.
*/
public static Aggregator fixedPointSum() {
return new FixedSumAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values extracted from the given attributePath.
* Does NOT accept null input values.
* Accepts generic Number input values.
* Aggregation result type is Long.
*/
public static Aggregator fixedPointSum(String attributePath) {
return new FixedSumAggregator(attributePath);
}
/**
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values.
* Does NOT accept null input values.
* Accepts generic Number input values.
* Aggregation result type is Double.
*/
public static Aggregator floatingPointSum() {
return new FloatingPointSumAggregator();
}
/**
* @param attributePath the attribute path
* @param type of the input object.
* @return an aggregator that calculates the sum of the input values extracted from the given attributePath.
* Does NOT accept null input values.
* Accepts generic Number input values.
* Aggregation result type is Double.
*/
public static Aggregator floatingPointSum(String attributePath) {
return new FloatingPointSumAggregator(attributePath);
}
}