class QueryItem {

    private List<String> getOptionSetQueryFilterItems()
    {
        return getQueryFilterItems().stream()
            .map( code -> optionSet.getOptionByCode( code ) )
            .filter( option -> option != null )
            .map( option -> option.getUid() )
            .collect( Collectors.toList() );
    }

    public  QueryItem( DimensionalItemObject item );
    public  QueryItem( DimensionalItemObject item, LegendSet legendSet, ValueType valueType, AggregationType aggregationType, OptionSet optionSet );
    public  QueryItem( DimensionalItemObject item, LegendSet legendSet, ValueType valueType, AggregationType aggregationType, OptionSet optionSet, Boolean unique );
    public  QueryItem( DimensionalItemObject item, LegendSet legendSet, ValueType valueType, AggregationType aggregationType, OptionSet optionSet, RelationshipType relationshipType );
    public  QueryItem( DimensionalItemObject item, Program program, LegendSet legendSet, ValueType valueType, AggregationType aggregationType, OptionSet optionSet );
    public  QueryItem( DimensionalItemObject item, Program program, LegendSet legendSet, ValueType valueType, AggregationType aggregationType, OptionSet optionSet, RelationshipType relationshipType );
    public  QueryItem( DimensionalItemObject item, QueryOperator operator, String filter, ValueType valueType, AggregationType aggregationType, OptionSet optionSet );

}