2010-08-09 2 views
0

Мне нужно написать метод, который возвращает представление списка (java.util.List). Возвращаемое представление должно содержать только те элементы во входном списке, который возвращает true при тестировании с помощью метода isSuccessful().Получение представления списка на основе свойства

List<Entity> getSuccessfulEntities(List<Entity> entities) 
{ 
    //Return a List view of entities, each element of which returns true for isSuccessful(entity) 
} 

Я просмотрел API коллекций и списков, но не смог найти никаких средств для этого. Любой из коробки подумал?

ответ

1

Там нет ничего (по крайней мере, я знаю) в стандартной библиотеке Java, но вы можете использовать com.google.common.collect.Collections2.filter() и Predicate, который просто определяется как:

public interface Predicate<T> { boolean apply(T input); } 

Изменения в нефильтрованное и фильтрованное Collection влияют друг на друга. Пример кода:

Predicate<Entity> isSuccessful = new Predicate<Entity>() { 
    public boolean apply(Entity e) { 
     return e.isSuccessful(); 
    } 
}; 

Collection<Entity> successfulEntities = filter(entities, isSuccessful); 

Связанный:Java: What is the best way to filter a Collection?

+0

Это создает совершенно новый ArrayList. Мне нужен только просмотр (не поддающийся изменению), который фактически использует исходный список. – Jagat

+0

@ Jagat см. Обновленный ответ – NullUserException

1

Общий способ будет определять интерфейс предиката, который проверяет экземпляр T и возвращает логическое значение.

Затем возьмите экземпляр реализации Predicate в качестве параметра для getSuccesfulEntities и выполните итерацию по коллекции, вызвав метод в предикате, чтобы определить, должно ли оно быть в возвращенной коллекции.