2011-12-16 2 views
1

Как назвать эту модель, и есть ли существующие Apache-Обще утилита для этого:Узор о коллекции аксессора преобразования

class Person { 
    String getName(); 
} 

List<Person> persons = ...; 

// create a dynamic bean on the fly, which can be used as: 
Object personXxxx = transformListOfBeans(Person.class, persons); 
// so each of the bean properties now returns the list of the original property: 
List<String> personNames = personXxxx.name; 

// i.e. the transformation creates a new "type": 
class PersonXxxx { 
    List<String> getName(); 
} 

Как назвать такое преобразование? Прокси должен хранить подписи метода. Так что это не прокси, ни декоратор.

Ну, я могу просто переименовать сгенерированные имена свойств в форме множественного числа, например:

personXxxx.names 

Это не проблема. Я хочу знать, была ли такая модель уже известна, поэтому мне не нужно самостоятельно выбирать соответствующие слова.

+0

Я думаю, что объяснений недостаточно. Можете ли вы подробнее рассказать? –

+0

@gurung: см. Изменения. –

+0

Я думаю, что он хочет получить НЕ список людей, но список их имен, список их возрастов и т. Д. Я не знаю хорошего, общего способа сделать это. – user949300

ответ

1

Я не думаю, что для этого существует инструмент. Вы должны написать код:

List<String> names = new ArrayList<String>(persons.size()); 
for (Person person : persons) { 
    names.add(person.getName()); 
} 

Может быть, вы можете использовать самоанализ, чтобы быть более общим, но код очень прост.

+0

Да, код прост. Я хочу получить хорошее слово для 'Xxxx' и т. Д. –

+1

Извините, я не знаю ни одного имени. Это не решает ни одного короля проблемы, поэтому это не шаблон: шаблоны были выпущены из проблем. –

+0

Он делает. Поэтому вам не придется собирать список каждый раз. Просто преобразите его, и вы получите все. Вы можете показать список person.name в списке Html без создания и заполнить список самостоятельно. В JSP вы всегда используете foreach и println, но в JSF вам нужен «Список » для связывания с ''. –

0

Возможность объявить интерфейс для всех методов, например. (ведущий для ясности) INamable, IAgeable, ISexable и т. д. Cast the List<Person> to List<ISomething>. Очевидно, что это имеет проблемы.

1

Я не думаю, что есть шаблон как таковой, но guava обеспечивает простой способ преобразования коллекции один в другой. Например:

List<Person> persons = ...; 
Iterable<String> names = Iterables.transform(persons, new Function<Person, String>() { 
    @Override 
    public String apply(Person person) { 
     return person.getName(); 
    } 
}); 
+0

Ницца. Я бы, вероятно, сделал некоторые статические методы или перечисление для большинства распространенных случаев. – user949300

Смежные вопросы