001/*
002 * Copyright (c) 2016-2017 Chris K Wensel <chris@wensel.net>. All Rights Reserved.
003 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved.
004 *
005 * Project and contact information: http://www.cascading.org/
006 *
007 * This file is part of the Cascading project.
008 *
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 *
013 *     http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 */
021
022package cascading.operation.aggregator;
023
024import java.beans.ConstructorProperties;
025
026import cascading.tuple.Fields;
027
028/**
029 * Class MaxValue is an {@link cascading.operation.Aggregator} that returns the maximum value encountered in the
030 * current group.
031 * <p>
032 * Values are expected to be {@link Comparable} types vs numeric representations and
033 * the {@link Comparable#compareTo(Object)} result is use for max comparison.
034 */
035public class MaxValue extends ExtremaValueBase
036  {
037  /** Field FIELD_NAME */
038  public static final String FIELD_NAME = "max";
039
040  /** Constructs a new instance that returns the maximum value encountered in the field name "max". */
041  public MaxValue()
042    {
043    super( 1, new Fields( FIELD_NAME ) );
044    }
045
046  /**
047   * Constructs a new instance that returns the maximum value encountered in the given fieldDeclaration field name.
048   *
049   * @param fieldDeclaration of type Fields
050   */
051  @ConstructorProperties({"fieldDeclaration"})
052  public MaxValue( Fields fieldDeclaration )
053    {
054    super( 1, fieldDeclaration );
055    }
056
057  /**
058   * Constructs a new instance that returns the maximum value encountered in the given fieldDeclaration field name.
059   * Any argument matching an ignoredValue won't be compared.
060   *
061   * @param fieldDeclaration of type Fields
062   * @param ignoreValues     of type Object...
063   */
064  @ConstructorProperties({"fieldDeclaration", "ignoreValues"})
065  public MaxValue( Fields fieldDeclaration, Object... ignoreValues )
066    {
067    super( fieldDeclaration, ignoreValues );
068    }
069
070  @Override
071  protected boolean compare( Comparable lhs, Comparable rhs )
072    {
073    return lhs.compareTo( rhs ) < 0;
074    }
075  }