2016-10-07 25 views
2

castint arraychar arrayに可能ですか?もしそうなら - how?私はalphabetを含むcreate an char arrayに必要な場所int配列をchar配列に変換する


私は現在のプロジェクトに取り組んでいます。

return IntStream.range('a', 'z' + 1).mapToObj(i -> Character.valueOf((char) i)).toArray(Character[]::new); 

この変換:

return IntStream.range('a', 'z' + 1).toArray();

+0

を含むchar[]を与え、あなたはそれに48を加えてキャストするか、 'Character.forDigit(a、10)';のようにすることができます。 –

+0

はい、可能です。数字を16の数字に変換するだけです。a-fと0-9で構成されています:)) –

+2

いいえ、 'int []'を 'char []'にキャストすることはできません。また、あなたの現在のコードが機能しないので、それがどれほど短いかは関係ありません。最適化の第一のルール:それは働かなければならない。 Java 8は 'CharStream'を持っていないので、通常の' for'ループでそれを行うべきです。それは3行のコード(returnステートメントを含む4)しか必要とせず、それは機能します!* – Andreas

答えて

3

ええ、私たちは、文字配列を生成するためのストリームメソッドがありません。多分CharStreamクラス全体。いずれにしても、いいえ、int[]char[]の間にキャストすることはできません。

一方で、それは長い行を取得していますが、それは動作します:あなたは数字(0-9)を変換したい場合は

return IntStream.rangeClosed('a', 'z') 
      .mapToObj(c -> Character.toString((char) c)) 
      .collect(Collectors.joining()) 
      .toCharArray(); 

これは

[a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z] 
+0

作品は魅力的です!あなたが「これはうまく動作しません」という人ではないため、+ – TheRealVira

+1

Intream.range( 'a'、 'z' + 1) 'は 'IntStream.rangeClosed(' a '、' z ' ) ' – Pshemo

+0

@Pshemo、thx、これは質問にコメントとして含めることができます(IntStream.range( 'a'、 'z' + 1)'を取ったところから)。 –

0

するのは、それを維持、その後一行てみましょう: - (1でラインchar arrayconvertedをする必要があります!)マイ現在codeint arrayをcreats IntStreamからStream<Character>になります。 charとintは多くの計算で本質的に同じなので、この手順は不要です(特に比較の場合)。

編集:機能的であるように上記の行を修正

は、よりよい解決策があるが、私はまだそれを再度見つけようとしています。現在、配列Character[]を返します。

1行の制限がない場合、配列をリメイクするだけで簡単です。aを0インデックスとして扱います。

char[] back = new char[('z' + 1) - 'a']; 
IntStream.range('a', 'z' + 1).forEach(i -> back[i - 'a'] = (char) i); 
return back; 
+0

これは私が話していることです!唯一の問題は、 'オブジェクト配列'を返すことです。どのように文字配列にキャストできますか? :3 – TheRealVira

+0

私のコンパイラはあなたの解決策が私のために次のエラーにつながるかどうかわかりません:エラー:java:互換性のない型:java。lang.Integerをcharに変換することはできません – hasan

+0

どちらも正しいですが、ただちに編集する方が良い方法があります。 – Rogue

0

絶対配列が異なるため、int配列をchar配列にキャストすることはできません。

2可能なオプションがあります:

1)char型の配列を作成し、int配列 2からそれぞれの値をコピーする)は、一般的なリストまたはコレクションを使用します。あなたは簡単にキャストに使用することができます

+0

はい、できます! http://Tackoverflow.com/a/39912839/6901146 – TheRealVira

+0

@TheRealViraストリームはそれを行います。配列ではありません –

+0

@AlexKlimashevskyは正しいですが、私の答えは*キャスト*をしていませんが、他の手段で問題を解決するだけで正しい使用を保つためです。 –