В настоящее время, когда я хочу отфильтровать список, я использую для итерации по его элементам и копирования элементов, соответствующих моим требованиям, в новый список, но таким образом я использую O (2N) пространственной сложности. Есть ли более эффективный способ сделать это?Что является самым простым способом фильтрации списка на Java?
0
A
ответ
1
Если вы используете Java 8, вы можете просто использовать myList.stream(). Filter(); В противном случае вы можете принять Filter Pattern.
public abstract class Filter<T> {
public abstract boolean passes(T object);
public Iterator<T> filter(Iterator<T> iterator) {
return new FilterIterator(iterator);
}
public Iterable<T> filter(Iterable<T> iterable) {
return new Iterable<T>() {
public Iterator<T> iterator() {
return filter(iterable.iterator());
}
};
}
private class FilterIterator implements Iterator<T> {
private Iterator<T> iterator;
private T next;
private FilterIterator(Iterator<T> iterator) {
this.iterator = iterator;
toNext();
}
public boolean hasNext() {
return next != null;
}
public T next() {
if (next == null)
throw new NoSuchElementException();
T returnValue = next;
toNext();
return returnValue;
}
public void remove() {
throw new UnsupportedOperationException();
}
private void toNext() {
next = null;
while (iterator.hasNext()) {
T item = iterator.next();
if (item != null && passes(item)) {
next = item;
break;
}
}
}
}
}
0
Вы всегда будете иметь O (2N) пространственную сложность, если вам нужно сохранить старый список, а также построить новый список.
Если вам не нужно делать глубокую копию, храните ссылки в новом списке. То есть внутри вашей петли вместо чего-то вроде newlist.add(item.deepClone())
, просто сделайте newlist.add(item)
.
Если вам не нужно хранить старый список, вы можете выбросить элементы, которые не соответствуют вашим требованиям. Например. внутри вашей петли вместо if (isAKeeper(item)) newlist.add(...)
, используйте if (!isAKeeper(item)) oldList.remove(item)
.
Смежные вопросы
- 1. Что является самым простым способом отслеживать результаты?
- 2. Что является самым простым способом вызова метода Java из C++?
- 3. Что является самым простым самым элегантным способом использования настраиваемого атрибута
- 4. Что является самым простым способом реализации Scala PartialFunction в Java?
- 5. Что является самым простым способом анализа файла INI на C++?
- 6. Что является самым простым способом сделать StyledTextCtrl похожим на TextCtrl?
- 7. Что является самым простым способом объединить два видеоролика flv?
- 8. Что является самым простым способом реализации серверного сервера Comet?
- 9. Что является самым простым способом загрузить библиотеку clojure все время?
- 10. phonegap development, Что является самым простым способом добавления плагина?
- 11. Что является самым простым способом остановить окно Winforms, перемещаемое вокруг
- 12. Что является самым простым способом синхронизации изменений модели? Rails
- 13. Что является самым простым способом генерации Действительного x: Имя?
- 14. Что является самым простым способом запуска windows cron job
- 15. Что является самым простым способом конвертировать существующий проект в Sass?
- 16. Что является самым простым способом интеграции PayPal в систему регистрации?
- 17. Что является самым простым способом сохранить эти маркеры/координаты
- 18. Что является самым простым способом рендеринга объекта freemarker как JSON?
- 19. Что является самым простым способом получить текущее местоположение пользователя Android
- 20. Что является самым простым способом заставить компилятор сбросить ошибку?
- 21. Что является самым простым способом сделать сайт отзывчивым?
- 22. Что является самым простым способом вставить скрипт в чужой домен?
- 23. Что является самым простым способом установки numpy с LAPACK/BLAS?
- 24. Что является самым простым способом задержать загрузку изображений в Angular
- 25. Что является самым простым способом обернуть обещание в ES6?
- 26. Что является самым простым способом вызова метода C# из Javascript
- 27. Что является самым простым способом превратить webapp в мобильное приложение?
- 28. Что является самым простым способом выделить/выделить дубликаты записей запроса?
- 29. Что является самым простым способом хранения и загрузки данных Javascript?
- 30. Что является самым простым способом разбить поля ввода в столбцы?