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

com.jparams.store.index.reducer.LimitReducer Maven / Gradle / Ivy

There is a newer version: 3.1.4
Show newest version
package com.jparams.store.index.reducer;

import java.util.List;

import com.jparams.store.index.Element;

/**
 * Reduces elements a key once the configured limit has been reached
 *
 * @param  key type
 * @param  value type
 */
public class LimitReducer implements Reducer
{
    private final int limit;
    private final Retain retain;

    public LimitReducer(final int limit, final Retain retain)
    {
        this.limit = limit;
        this.retain = retain;
    }

    @Override
    public void reduce(final K key, final List> elements)
    {
        if (elements.size() <= limit)
        {
            return;
        }

        if (retain == Retain.OLDEST)
        {
            reduceOldest(elements);
        }
        else if (retain == Retain.NEWEST)
        {
            reduceNewest(elements);
        }
    }

    private void reduceNewest(final List> elements)
    {
        for (int i = 0; i < (elements.size() - limit); i++)
        {
            elements.get(i).remove();
        }
    }

    private void reduceOldest(final List> elements)
    {
        for (int i = limit; i < elements.size(); i++)
        {
            elements.get(i).remove();
        }
    }

    public enum Retain
    {
        NEWEST,
        OLDEST
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy