19

I need to convert from List<Object> to String[].

I made:

List<Object> lst ...
String arr = lst.toString();

But I got this string:

["...", "...", "..."]

is just one string, but I need String[]

Thanks a lot.

5
  • 1
    How do you convert a random Object into a String? Commented Feb 8, 2013 at 13:07
  • toString is (in most classes) purely intended for diagnostic messages, not "production". Commented Feb 8, 2013 at 13:08
  • I want convert all list in String[] without iterate over it. Commented Feb 8, 2013 at 13:09
  • Did you look at the spec for List? (I'm guessing not, otherwise you would have noticed toArray.) Commented Feb 8, 2013 at 13:10
  • Java 8 : stackoverflow.com/a/31002358/1216775 Commented Sep 3, 2019 at 4:02

7 Answers 7

28

You have to loop through the list and fill your String[].

String[] array = new String[lst.size()];
int index = 0;
for (Object value : lst) {
  array[index] = (String) value;
  index++;
}

If the list would be of String values, List then this would be as simple as calling lst.toArray(new String[0]);

Sign up to request clarification or add additional context in comments.

1 Comment

Change array[index] = (String) value, to array[index] = String.valueOf( value ). The answer as it is will crash if the list contains anything, but Strings. Maybe this is what OP wants.
14

You could use toArray() to convert into an array of Objects followed by this method to convert the array of Objects into an array of Strings:

Object[] objectArray = lst.toArray();
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);

4 Comments

Why additional array copy when objectArray can still be used as String[]?
See the bottom part of the linked question - casting objectArray to String[] causes a ClassCastException. This answer explains better: stackoverflow.com/a/1018774/1063716
Yes in case of List containing objects other than string. But that happens even in your code.
List<Object> lst = new ArrayList<Object>(); lst.add(1); I m getting ArrayStoreException for this test case.
11

Java 8

Java 8 has the option of using streams as well.

List<Object> lst = new ArrayList<>(); 
lst.add("Apple"); 
String[] strings = lst.stream().toArray(String[]::new); 
System.out.println(Arrays.toString(strings));  // [Apple]

If we have a stream of Object, we would need an intermediate operation to do object-to-string conversion, and a terminal operation to collect the results. We can use Objects.toString(obj, null) or any other such implementation for string conversion.

String[] output = lst.stream()
    .map((obj) -> Objects.toString(obj, null))
    .toArray(String[]::new);

1 Comment

I had to do myObjects.stream().map(myObj::toString).toArray(String[]::new);
5

If we are very sure that List<Object> will contain collection of String, then probably try this.

List<Object> lst = new ArrayList<Object>();
lst.add("sample");
lst.add("simple");
String[] arr = lst.toArray(new String[] {});
System.out.println(Arrays.deepToString(arr));

Comments

2

Lot of concepts here which will be useful:

List<Object> list = new ArrayList<Object>(Arrays.asList(new String[]{"Java","is","cool"}));
String[] a = new String[list.size()];
list.toArray(a);

Tip to print array of Strings:

System.out.println(Arrays.toString(a));

Comments

2

Using Guava

List<Object> lst ...    
List<String> ls = Lists.transform(lst, Functions.toStringFunction());

Comments

0

There is a simple way available in Kotlin

var lst: List<Object> = ...
    
listOFStrings: ArrayList<String> = (lst!!.map { it.name })

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.