У меня есть класс фильтра, в котором пользователь должен объявить тип (например, Filter<Double>
, Filter<Float>
и т. Д.). Затем класс реализует фильтр скользящего среднего, поэтому объекты в классе должны быть добавлены. У меня вопрос как это сделать? Извините, если ответ прост, но я запутался, слишком много думая об этом: p.
public abstract class FilterData<T>
{
private final List<T> mFilter;
private T mFilteredValue; // current filtered value
protected Integer mSize = 10;
private T mUnfilteredValue; // current unfiltered value
public FilterData()
{
mFilter = new ArrayList<T>();
}
public FilterData(int size)
{
mSize = size;
mFilter = new ArrayList<T>(mSize);
}
public abstract T add(final T pFirstValue, final T pSecondValue);
@SuppressWarnings("unchecked")
public T filter(T currentVal)
{
T filteredVal;
mUnfilteredValue = currentVal;
push(currentVal);
T totalVal = (T) (new Integer(0));
int numNonZeros = 1;
for (int i = 0; i < mFilter.size(); ++i)
{
if (mFilter.get(i) != (T) (new Integer(0)))
{
++numNonZeros;
T totalValDouble = add(mFilter.get(i), totalVal);
totalVal = totalValDouble;
}
}
Double filteredValDouble = (Double) totalVal / new Double(numNonZeros);
filteredVal = (T) filteredValDouble;
mFilteredValue = filteredVal;
return filteredVal;
}
public T getFilteredValue()
{
return mFilteredValue;
}
public List<T> getFilterStream()
{
return mFilter;
}
public T getUnfilteredValue()
{
return mUnfilteredValue;
}
public void push(T currentVal)
{
mFilter.add(0, currentVal);
if (mFilter.size() > mSize)
mFilter.remove(mFilter.size() - 1);
}
public void resizeFilter(int newSize)
{
if (mSize > newSize)
{
int numItemsToRemove = mSize - newSize;
for (int i = 0; i < numItemsToRemove; ++i)
{
mFilter.remove(mFilter.size() - 1);
}
}
}
}
Правильно ли я включить абстрактный метод Add и, если да, как мне правильно расширить класс для охвата примитивных типов (например, Float, Double, Integer и т. Д.)
Спасибо
Chris
EDIT:
Извиняюсь за неясность. Боюсь, это не домашнее задание, эти дни давно позади. Я довольно новичок в Java, пришедший из C ++ фона (отсюда ожидание легкой перегрузки операторов). Что касается метода «толчка». Я приношу извинения за добавленный там метод add, то есть просто добавление значения в список, а не добавление переменных, на которое я ссылался (тогда я сделал пометку, чтобы изменить имя моего метода!). Этот класс используется для предоставления интерфейса для создания Списка заданной длины, заполнения его переменными и получения среднего значения по последним кадрам 'x', чтобы сгладить любые скачки в данных. Когда новый объект добавляется в объект FilterData, он добавляется в начало списка, а последний объект удаляется (при условии, что список достиг максимально допустимого размера). Итак, чтобы обеспечить непрерывное скользящее среднее, я должен суммировать и делить значения в списке.
Однако для выполнения этого сложения мне нужно будет найти способ сложения объектов вместе. (Это просто вспомогательный класс, поэтому я хочу сделать его как можно более универсальным). Это делает это более ясным? (Я знаю, что код очень похож на Микки Мауса, но я хотел сделать его максимально понятным и простым).