質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

9764閲覧

オブジェクトの配列をプリミティブ型配列への変換は、どのようにすればよいでしょうか。

taka_miyata

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2016/05/03 04:59

プリミティブ型の配列をパラメータに指定する公開メソッドがあります。

java

1//例えば、このようなメソッド 2public void setArray( byte[] values );

このパラメータに入れる要素が動的な為、
コレクションのArrayListを利用し、toArray()で
配列化し、メソッドに設定しようとした場合、
型が一致しないので、メソッドに渡せません。

java

1List<Byte> lstElement = new ArrayList<Byte>(); 2 3lstElement.add( (byte)1 ); 4lstElement.add( (byte)0 ); 5 6Byte[] arrayByte = lstElement.toArray( new Byte[0] ); //配列化 7setArray( arrayByte );// ← 型が合わないため、コンパイルエラー

このような場合、皆さん どうされていますか。
byte[] をサイズ分生成し、詰め直すしかないようでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Apache Commons-Lang3のArrayUtils.toPrimitiveが変換可能ですのでお試しください。

java

1import org.apache.commons.lang3.ArrayUtils; 2// …中略… 3List<Byte> list = new ArrayList<>(); 4list.add(Byte.valueOf((byte)0)); 5list.add(Byte.valueOf((byte)1)); 6 7Byte[] arrayByte = list.toArray(new Byte[0]); 8 9setArray( ArrayUtils.toPrimitive(arrayByte));

投稿2016/05/03 16:16

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka_miyata

2016/05/03 21:16

ありがとうございます。 試してみます。
guest

0

おそらくそれしかないですね。
おそらくそういう手間があるために、Java8のStream APIではIntStreamとかLongStreamとかのプリミティブ用のStreamが存在するのだと思われます(これらなら直接プリミティブ配列を作れる)。
あいにくListやCollectionにそういうプリミティブ特化型のものがないため、手間ですがプリミティブ型の配列を新たに作成し、順次入れていくしかなさそうですね。

投稿2016/05/03 05:40

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka_miyata

2016/05/03 21:17

ありがとうございます。 標準仕様では、やはり無理ですか。
guest

0

「質問のオブジェクトの配列を・・・」ではありませんが、

java.nio.Bufferを使ってはどうでしょう?

Java

1int maxSize = 256; 2ByteBuffer buffer = ByteBuffer.allocate(maxSize); 3 4buffer.put((byte) 1); 5buffer.put((byte) 0); 6 7buffer.flip();// 読み込み準備 8byte[] bytes = new byte[buffer.remaining()];// 配列化 9buffer.get(bytes); 10 11setArray(bytes);

ただし、少なくともバッファの位置やリミットを意識する必要があり、覚えることもあるのでめんどくさいとおもいますが。

投稿2016/05/06 07:21

RyotaKondo

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka_miyata

2016/05/09 14:08

こんなものがあるのですか。 参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問