15

Please help me to convert ArrayList to String[]. The ArrayList contains values of type Object(VO).

For example,

The problem is that I need to convert a country List to String Array, sort it and then put it in a list. However I am getting a ClassCastException.

Amit
  • 13,134
  • 17
  • 77
  • 148
user1000535
  • 957
  • 2
  • 8
  • 8
  • 1
    need more description, can you please paste code here – ManMohan Vyas Jul 13 '12 at 05:38
  • 2
    Properly override the toString() method of your class. And then do as Pramod Kumar has answered. That way no class cast exception. But you should know this is a bad workaround. You should find where your List is getting elements of a type other than Country. This is exactly what Java Generics prevent. So you might want to start using it... – Thihara Jul 13 '12 at 05:42
  • I guess other guys got misunderstood of the question. The actual task is under your quotes below? Could you please clarify this? Take a look at my answer plz http://stackoverflow.com/a/11464855/538514 – Viktor Stolbin Jul 13 '12 at 06:06

6 Answers6

27
String [] countriesArray = countryList.toArray(new String[countryList.size()]);

I have assumed that your country List name is countryList.

So to convert ArrayList of any class into array use following code. Convert T into the class whose arrays you want to create.

List<T> list = new ArrayList<T>();    
T [] countries = list.toArray(new T[list.size()]);
Pramod Kumar
  • 7,914
  • 5
  • 28
  • 37
10

Please help me to convert ArrayList to String[], ArrayList Contains Values Object(VO) as Values.

As you mentioned that list contains Values Object i.e. your own class you need toString() overridden to make this work correctly.

This code works. Assuming VO is your Value Object class.

    List<VO> listOfValueObject = new ArrayList<VO>();
    listOfValueObject.add(new VO());
    String[] result = new String[listOfValueObject.size()];
    for (int i = 0; i < listOfValueObject.size(); i++) {
        result[i] = listOfValueObject.get(i).toString();
    }
    Arrays.sort(result);
    List<String> sortedList = Arrays.asList(result);

The snippet of

    List<VO> listOfValueObject = new ArrayList<VO>();
    listOfValueObject.add(new VO());
    String[] countriesArray = listOfValueObject.toArray(new String[listOfValueObject.size()]);

will give you ArrayStoreException due VO is not the String type as required by native method arraycopy subsequently called from toArray one.

Viktor Stolbin
  • 2,899
  • 4
  • 32
  • 53
7

In case your ArrayList contains Strings, you can simply use the toArray method:

String[] array = list.toArray( new String[list.size()] );

If that is not the case (as your question is not completely clear on this), you will have to manually loop over all elements

List<MyRandomObject> list;
String[] array = new String[list.size() ];
for( int i = 0; i < list.size(); i++ ){
  MyRandomObject listElement = list.get(i);
  array[i] = convertObjectToString( listElement );
}
Robin
  • 36,233
  • 5
  • 47
  • 99
  • toArray(new String[...]) will work only if list is of the same String type, won't it? Assuming the question the list is of type ValueObject. – Viktor Stolbin Jul 13 '12 at 06:04
  • Thank you very much, it helps me a lot to solve my problem, I got exact solution. the code is, List countryList=new ArrayList(); CountryVO vo=new CountryVO(); vo.setName("Malaisie"); countryList.add(vo); CountryVO vo1=new CountryVO(); vo1.setName("Allemagne"); countryList.add(vo1); String[] array = new String[countryList.size() ]; for( int i = 0; i < countryList.size(); i++ ){ CountryVO listElement = countryList.get(i); array[i]=listElement.getName(); }Arrays.sort(array); Thanks to All – user1000535 Jul 16 '12 at 06:21
4
String[] array = list.toArray(new String[list.size()]);

What are we doing here:

  • String[] array is the String array you need to convert your ArrayList to
  • list is your ArrayList of VO objects that you have in hand
  • List#toArray(String[] object) is the method to convert List objects to Array objects
GingerHead
  • 8,130
  • 15
  • 59
  • 93
2

As correctly suggested by Viktor, I have edited my snippet.

The is a method in ArrayList(toArray) like:

List<VO> listOfValueObject // is your value object
String[] countries  = new String[listOfValueObject.size()];
for (int i = 0; i < listOfValueObject.size(); i++) {
    countries[i] = listOfValueObject.get(i).toString();
}

Then to sort you have::

Arrays.sort(countries);

Then re-converting to List like ::

List<String> countryList = Arrays.asList(countries);
Sashi Kant
  • 13,277
  • 9
  • 44
  • 71
2

Prior to Java 8 we have the option of iterating the list and populating the array, but with Java 8 we have the option of using stream as well. Check the following code:

   //Populate few country objects where Country class stores name of country in field name.
    List<Country> countries  = new ArrayList<>();
    countries.add(new Country("India"));
    countries.add(new Country("USA"));
    countries.add(new Country("Japan"));

    // Iterate over list
    String[] countryArray = new String[countries.size()];
    int index = 0;
    for (Country country : countries) {
        countryArray[index] = country.getName();
        index++;
    }

    // Java 8 has option of streams to get same size array
    String[] stringArrayUsingStream = countries.stream().map(c->c.getName()).toArray(String[]::new);
akhil_mittal
  • 23,309
  • 7
  • 96
  • 95