001    /*
002     * Copyright (c) 2007-2015 Concurrent, Inc. All Rights Reserved.
003     *
004     * Project and contact information: http://www.cascading.org/
005     *
006     * This file is part of the Cascading project.
007     *
008     * Licensed under the Apache License, Version 2.0 (the "License");
009     * you may not use this file except in compliance with the License.
010     * You may obtain a copy of the License at
011     *
012     *     http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing, software
015     * distributed under the License is distributed on an "AS IS" BASIS,
016     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017     * See the License for the specific language governing permissions and
018     * limitations under the License.
019     */
020    
021    package cascading.util;
022    
023    import java.io.Serializable;
024    import java.util.Comparator;
025    
026    /**
027     * Class NullNotEquivalentComparator simply returns -1 if the lhs is null, 1 if the rhs is null, or
028     * the result of {@code lhs.compareTo(rhs)}.
029     * <p/>
030     * Use this {@link Comparator} when performing a {@link cascading.pipe.CoGroup} that needs SQL like semantics.
031     */
032    public class NullNotEquivalentComparator implements Comparator<Comparable>, Serializable
033      {
034      @Override
035      public int compare( Comparable lhs, Comparable rhs )
036        {
037        if( lhs == null )
038          return -1;
039    
040        if( rhs == null )
041          return 1;
042    
043        return lhs.compareTo( rhs );
044        }
045      }