これは非常にシンプルですが、実際にはJava 8の機能のnoobであり、これを実現する方法がわかりません。 、JavaストリームtoArray()は特定のタイプの配列に変換します
「キー、名前」
と私はカンマ(、)で各値を分離し、文字列の配列にその行を変換したい:私は、次のテキストが含まれています。このシンプルなラインを持っていますしかし、私はまた、最終的な配列を返す前に、すべてのフィールドをトリミングしたいので、私は次のようでした:
Arrays.stream(line.split(",")).map(String::trim).toArray();
しかし、これは、Object []配列ではなく、String []型の配列を返します。さらに検査すると、内容が実際にStringインスタンスであることが確認できますが、配列自体はObject要素であることが確認できます。
Object[]:
0 = (String) "Key"
1 = (String) "Name"
は、私の知る限り、問題は、マップの呼び出しの戻り値の型であるが、どのように私はそれを返すことができます。これは、デバッガが返されたオブジェクトの言うことで、私はこのことを説明してみましょうString [] array?
で
String::trim
を置き換えることができます同じように構文でより快適かもしれませんn->new String[n]
でString[]::new
を交換した場合、あなたは 'のString [] :: new'メソッド参照が何をしているか説明していただけますどのようにして、通常のラムダ式を使って同じことをすることができますか? (私はint型の "値"を生成することがわかりますが、それは私には意味がありません)。 – arielnmzもちろん、 "value"の代わりにパラメータ変数 "size"を指定するほうが意味が分かりやすいでしょう。 – Holger
ところで、デリミタの空白部分を作ると 'trim'ステップは廃止されます。 'line.split(" \\ s *、\\ s * ")'のようになりますので、最初は結果文字列に含まれていません。次に、ストリーム操作はまったく必要ありません。 'String [] result = line.split(" \\ s *、\\ s * ");'。あるいは 'String [] result = line.split("、 "); Arrays.asList(結果).replaceAll(文字列::トリム); 'あなたはすべてのタスクのためにストリームを必要としません... – Holger