возврат ArrayList в строку

#java #string #arraylist #return

#java #строка #arraylist #Возврат

Вопрос:

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

например, в строке есть 3 гаража

 BMW Garages
Mercedes Garages
Toyta Garages
  

Когда я возвращаю его, он отображает только последний:

 Toyta Garages
  

Вот код, с которым я работаю:

 private String arrayListToString()
{
    NepGarazasCtr garCtr = new NepGarazasCtr();
    ArrayList<NepGarazas> gautGar = garCtr.gautVisusGarazus();

    String nepGar = "";

    for(NepGarazas npGar: gautGar)
    {
        nepGar = npGar.getGarazoPav();
        System.out.println(nepGar);
        //System.out.println(Arrays.toString(nepGar));
    }
    return nepGar;
}
  

И вот где я это поместил:

 String[] array = { arrayListToString() };
  

Итак, мой вопрос: как вернуть всю строку, а не только последний элемент? Или это невозможно? Я хочу поместить строку в JComboBox.

Спасибо.

Комментарии:

1. Попробуйте более упрощенные имена переменных на английском языке, которые понятны пользователям

Ответ №1:

Вы хотите установить некоторые String в JComboBox . Ну, вы можете просто использовать DefaultComboBoxModel<String> .
Примечание: В приведенном ниже коде используется оператор diamond <> из Java 7, вам следует изменить это, если вы используете и более старую версию Java.

 String[] stringArray = arrayListToString() ;
DefaultComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>(stringArray);
JComboBox<String> comboBox = new JComboBox<>(comboBoxModel);
  

Как вы можете видеть, вам просто нужно инициализировать stringArray с помощью вашего метода.
Итак, основной ошибкой в вашем коде является возвращаемый тип arrayListToString() , который может быть String[] и нет String .

 private String[] arrayListToString() {
  //Look at the Zhuinden's answer ;)
}
  

Возможно, вам также следует изменить имя метода, что-то вроде arrayListToStringArray() должно быть более подходящим сейчас 🙂

Ответ №2:

По сути, проблема в том, что вы пытаетесь вернуть одну строку вместо фактического массива строк. Поэтому то, что вам нужно сделать, это фактически создать массив и вернуть его в переменную String[] , а не просто в один атрибут. Ваше решение может работать на C #, используя возврат yield в foreach, но не в этом сценарии. Поэтому вот простое решение проблемы, хотя и не самое лучшее (я создал новый список, а не создал массив размером с размер gautGar, я добавлю это в конец):

 private String[] arrayListToString()
{
    NepGarazasCtr garCtr = new NepGarazasCtr();
    List<NepGarazas> gautGar = garCtr.gautVisusGarazus();

    List<String> stringList = new ArrayList<String>();

    for(NepGarazas npGar: gautGar)
    {
        stringList.add(npGar.getGarazoPav());
        System.out.println(nepGar);
        //System.out.println(Arrays.toString(nepGar));
    }
    return stringList.toArray(new String[stringList.size()]);
}


...


String[] array =  arrayListToString();
  

Или просто сделайте

 private String[] arrayListToString()
{
    NepGarazasCtr garCtr = new NepGarazasCtr();
    List<NepGarazas> gautGar = garCtr.gautVisusGarazus();

    String[] stringArray = new String[gautGar.size()];

    for(int i = 0; i < gautGar.size(); i  )
    {
        NepGarazas npGar = gautGar.get(i);
        stringArray[i] = npGar.getGarazoPav();
        System.out.println(nepGar);
    }
    return stringArray;
}
  

Ответ №3:

Вы сказали, что он напечатал массив просто отлично, поэтому System.out.println(nepGar); работает так, как вы хотите. Я думаю, ваша единственная проблема заключается в том, что в каждом цикле вы устанавливаете всю строку nepGar в текущий элемент, то есть на последней итерации строка будет значением последнего элемента.

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

 nepGar = npGar.getGarazoPav();
  

к этому:

 nepGar  = npGar.getGarazoPav()   "n";
  

Комментарии:

1. Пока я думал об этом (хотя я бы также заставил его использовать StringBuffer), я думаю, что если ему это нужно для JComboBox , то они будут отдельными элементами, только если каждый из них представляет собой отдельную строку в String[] , а не один большой двоичный объект с новыми строками.

2. @Zhuinden StringBuffer совершенно не нужен при ответе на подобные вопросы. Они просто сбивают людей с толку. Но да, вы правы в том, что ему, вероятно, нужно вместо этого, однако я просто ответил на вопрос, который он специально задал для возврата строки.

3. Я бы предпочел показать им правильную практику, чтобы они не совершали глупых ошибок позже, согласно yoda.arachsys.com/java/strings.html

4. = со строками в цикле — очень плохая практика и огромный убийца производительности! Я бы воздержался от рекомендации этой практики!

5. @SeanPatrickFloyd Огромный убийца производительности? Он перебирает ArrayList с тремя элементами. Серьезно, в простых случаях, подобных этому, это ничего не делает.