42

Trying to solve what should be a simple problem. Got a list of Bytes, want to convert it at the end of a function to an array of bytes.

final List<Byte> pdu = new ArrayList<Byte>();
....
return pdu.toArray(new byte[pdu.size()]);;

compiler doesn't like syntax on my toArray. How to fix this?

4 Answers 4

59

The compiler doesn't like it, because byte[] isn't Byte[].

What you can do is use commons-lang's ArrayUtils.toPrimitive(wrapperCollection):

Byte[] bytes = pdu.toArray(new Byte[pdu.size()]);
return ArrayUtils.toPrimitive(bytes);

If you can't use commons-lang, simply loop through the array and fill another array of type byte[] with the values (they will be automatically unboxed)

If you can live with Byte[] instead of byte[] - leave it that way.

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

3 Comments

Thanks a lot! :) I had not seen ArrayUtils.toPrimitive before, quite useful.
I do not like the solution of ArrayUtils. There has to be out of box solution for Java 8.
To use this lib in Android, put this in Gradle of App: implementation 'org.apache.commons:commons-text:1.6'
33

Use Guava's method Bytes.toArray(Collection<Byte> collection).

List<Byte> list = ...
byte[] bytes = Bytes.toArray(list);

This saves you having to do the intermediate array conversion that the Commons Lang equivalent requires yourself.

Comments

5

Mainly, you cannot use a primitive type with toArray(T[]).

See: How to convert List<Integer> to int[] in Java?. This is the same problem applied to integers.

Comments

1

try also Dollar (check this revision):

import static com.humaorie.dollar.Dollar.*
...

List<Byte> pdu = ...;
byte[] bytes = $(pdu).convert().toByteArray();

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.