All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.onebusaway.collections.Counter Maven / Gradle / Ivy

/*
 * Copyright 2008 Brian Ferris
 *
 * 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 org.onebusaway.collections;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Counter implements Serializable {

    private static final long serialVersionUID = 1L;

    private Map _counts = new HashMap();

    private int _total = 0;

    public int size() {
        return _counts.size();
    }

    public void increment(T key, int offset) {
        int count = getCount(key) + offset;
        _counts.put(key, count);
        _total += offset;
    }

    public void increment(T key) {
        increment(key, 1);
    }

    public void decrement(T key) {
        increment(key, -1);
    }

    public int getCount(T key) {
        Integer count = _counts.get(key);
        if (count == null)
            count = 0;
        return count;
    }

    public Set getKeys() {
        return _counts.keySet();
    }

    public Set> getEntrySet() {
        return _counts.entrySet();
    }

    public int getTotal() {
        return _total;
    }

    public T getMax() {
        int maxCount = 0;
        T maxValue = null;
        for (Map.Entry entry : _counts.entrySet()) {
            if (maxValue == null || maxCount < entry.getValue()) {
                maxValue = entry.getKey();
                maxCount = entry.getValue();
            }
        }
        return maxValue;
    }

    /**
     * @return sorted from min to max
     */
    public List getSortedKeys() {
        List values = new ArrayList(_counts.keySet());
        Collections.sort(values, new Comparator() {
            public int compare(T o1, T o2) {
                int a = getCount(o1);
                int b = getCount(o2);
                if (a == b)
                    return 0;
                return a < b ? -1 : 1;
            }
        });
        return values;
    }

    /*******************************************************************************************************************
     * {@link Object} Interface
     ******************************************************************************************************************/

    @Override
    public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof Counter))
            return false;
        Counter c = (Counter) obj;
        return _counts.equals(c._counts);
    }

    @Override
    public int hashCode() {
        return _counts.hashCode();
    }

    @Override
    public String toString() {
        return _counts.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy