2016-01-14 2 views
1

У меня есть список объектов, у которых есть поле - название. Нужно собрать заголовок в списке. Я делаю это в коде ниже. Но, возможно, это возможно сделать более элегантным? Благодарю.Самый элегантный способ работы с коллекцией

ArrayList<String> organizationTitles = new ArrayList<String>(); 
for (Organization organization : result){ 
    organizationTitles.add(organization.getTitle()); 
} 
+0

Не на Android. Хотя мне непонятно, что вы считаете неэлегантным. –

+0

Ему не нравится петля. : P Никто не любит петли. Правило петли! –

+0

В python я могу сделать это в одной строке использования карты, я просто надеюсь найти в android некоторые вещи, как он. – Kota1921

ответ

1

Если вы используете JDK 8, то да. Для вашего дела есть лямбда:

result.forEach((Organization organization) -> organizationTitles.add(organization.getTitle())); 

Что будет делать то же самое, но более компактно. Однако, если вы используете Java 7, нет более элегантного способа (насколько мне известно).

Редактировать: Просто отметили, что вы находитесь на Android. Я не думаю, что Java 8 уже поддерживается, поэтому это, вероятно, не сработает.

+0

На самом деле это не рекомендуется. Добавление в коллекцию внутри внутреннего цикла не является функциональным программированием. Я бы предложил использовать Stream.map(). –

1

Если result является Collection, то вы можете сделать это:

result.stream().forEach(e -> {organizationTitles.add(e.getTitle);}); 
+0

На самом деле это не рекомендуется. Добавление в коллекцию внутри внутреннего цикла не является функциональным программированием. Я бы предложил использовать Stream.map(). –

+0

запомнит это. благодаря! –

3

Если вы в Java8, это идеальный способ сделать:

List<String> organizationTitles = result.stream() 
             .map(Organization::getTitle) 
             .collect(Collectors.toList()) 

Тогда, если вы не в любви с этим, here - это место, куда вы хотите пойти дальше:

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