2017-01-26 11 views
-1

Примечание: Пожалуйста, измените название, если вы могли бы написать лучше .. Я понятия не имею, как объяснить это лучше ..Как добавить все строки в ArrayList из списка наиболее эффективных объектов?

к проблеме: Я использую автозаполнение в форме JavaFX и нужно получить все клиенты firstName в список для строк. Я использовал JPA, чтобы получить всех клиентов из базы данных. Так что я немного беспокоился о скорости моего кода .. Вы видите, почему ..

Пример кода:

public static List<String> getAllFirstNamesCustomer() { 
     List<String> names = new ArrayList<>(); 
     for (Customer c : CustomerBean.getAllCustomers()) { 
      names.add(c.getCName()); 
     } 
     List<String> output = 
      new ArrayList<>(new LinkedHashSet<>(names)); 
     return output; 

    } 

EDIT:

Подумайте я нашел лучший способ:

public static List<String> getAllFirstNamesCustomer() { 
    return em.createNativeQuery("select DISTINCT cname from customer").getResultList(); 
} 
+1

Если вы беспокоитесь о дубликатах, я мог бы начать с 'Set 'вместо' ArrayList', если возможно, у меня будет запрос JPA и удалите дубликаты, если это возможно. Я бы не стал беспокоиться «слишком», если это не станет узким местом, преждевременная оптимизация может быть убийцей времени. – MadProgrammer

+0

2 вопроса. 1) почему вы получаете дополнительный выходной список для возврата? 2) если вы хотите использовать использование вывода, как этот Список output = new ArrayList <> (имена); – LowCool

ответ

1

Хорошим вариантом будет драйвер базы данных для передачи данных. Обходной и с большим набором данных клиентов, вы можете использовать Java 8's параллельные потоки, которые используют преимущества всех ядер центрального процессора, с одним вкладышем

List<String> names = CustomerBean.getAllCustomers().parallelStream().map(c.getCName()).collect(toList()); 
+0

Спасибо. Работал! –

+0

Рад, что я могу помочь – iamiddy