ZhaoGang:
マイ以下のコード:
String[] valStrs=data.split(";");//data is a string
Integer[] vals=Arrays.stream(valStrs).map(Integer::valueOf).toArray();
投げています:
error: incompatible types: Object[] cannot be converted to Integer[] [in Codec.java]
Integer[] vals=Arrays.stream(valStrs).map(Integer::valueOf).toArray();
私は私が取得しようとしています考えてString
、マップ、ストリームをString
にInteger
することによりInteger::valueOf
、これらを収集Integer
配列へ。
では、なぜこのエラー?クイック検索を行なったし、答えを見つける望めません。
更新:
事実とint[] arr= Arrays.stream(valStrs).mapToInt(Integer::parseInt).toArray();
完璧に動作します。
ラビンドラRanwala:
あなたは内に整数の配列へのコンストラクタの参照を渡す必要がありtoArray
、このような。それ以外の場合は、作成されObject[]
、デフォルトで。
Arrays.stream(valStrs).map(Integer::valueOf).toArray(Integer[]::new);
mapToInt
作成しIntStream
、それのtoArray()
関数が返されますint[]
。ここで宣言です。
int[] toArray();
逆に、map(Integer::valueOf)
作成しStream<Integer>
、それはだtoArray
リターンがObject[]
特に指定のない限り。ここでの実装です。
@Override
public final Object[] toArray() {
return toArray(Object[]::new);
}
呼び出しはtoArray(Integer[]::new)
、このオーバーロードされたメソッドを呼び出します。
public final <A> A[] toArray(IntFunction<A[]> generator)
ここではドキュメントからの抜粋です。
返された配列を割り当てるために設けられた発電機能を使用して、このストリームの要素を含む配列を返します。
所望のタイプの新しい配列および提供長さを生成する機能を発電機