15

请帮我将 ArrayList 转换为 String[]。ArrayList 包含 Object(VO) 类型的值。

例如,

问题是我需要将国家列表转换为字符串数组,对其进行排序,然后将其放入列表中。但是我得到了一个 ClassCastException。

4

6 回答 6

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

我假设您的国家名单名称是countryList.

因此,要将任何类的 ArrayList 转换为数组,请使用以下代码。将 T 转换为要创建其数组的类。

List<T> list = new ArrayList<T>();    
T [] countries = list.toArray(new T[list.size()]);
于 2012-07-13T05:38:45.503 回答
10

请帮我将 ArrayList 转换为 String[],ArrayList 包含值对象(VO)作为值。

正如您所提到的,该列表包含值对象,即您自己的类,您需要重写 toString() 以使其正常工作。

此代码有效。假设VO是您的值对象类。

    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);

的片段

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

会给你ArrayStoreException到期VO的不是本String机方法所需的类型,arraycopy随后从toArray一个调用。

于 2012-07-13T05:50:49.323 回答
7

如果您的ArrayListcontains String,您可以简单地使用以下toArray方法:

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

如果不是这种情况(因为您的问题对此并不完全清楚),您将不得不手动遍历所有元素

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 );
}
于 2012-07-13T05:47:23.547 回答
4
String[] array = list.toArray(new String[list.size()]);

我们在这里做什么:

  • String[]array 是String您需要转换 ArrayList为的数组
  • list 是您ArrayList手中的 VO 对象
  • List#toArray(String[] object)是将List对象转换为Array对象的方法
于 2012-07-13T05:51:44.600 回答
2

正如 Viktor 正确建议的那样,我已经编辑了我的片段。

这是 ArrayList(toArray) 中的一个方法,例如:

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();
}

然后排序你有::

Arrays.sort(countries);

然后像 :: 一样重新转换为 List

List<String> countryList = Arrays.asList(countries);
于 2012-07-13T05:40:08.297 回答
2

在 Java 8 之前,我们可以选择迭代列表和填充数组,但在 Java 8 中,我们也可以选择使用流。检查以下代码:

   //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);
于 2015-06-23T12:03:20.083 回答