1. ホーム
  2. java

[解決済み] Java ストリームを特定の型の配列に変換する関数です。

2023-05-09 16:59:32

質問

これは非常に簡単なことかもしれませんが、実は私はJava 8の機能に疎く、これを達成する方法がわかりません。私は次のテキストを含むこの単純な行を持っています。

キー、名前"。

で、その行をカンマ(,)で区切ってString配列に変換したいのですが、最終的な配列を返す前にすべてのフィールドをトリミングしたいので、次のようにしました。

Arrays.stream(line.split(",")).map(String::trim).toArray();

しかし、これはString[]配列ではなく、Object[]配列を返します。さらに調べてみると、中身は実際にはStringインスタンスですが、配列自体はObject要素であることが確認できます。これはデバッガーが返されたオブジェクトについて言っていることです。

Object[]:
    0 = (String) "Key"
    1 = (String) "Name"

見る限り、問題はmap呼び出しの戻り値の型にあるようですが、どうすればString[]配列を返すようになるのでしょうか?

どのように解決するのですか?

使用方法 toArray(size -> new String[size]) または toArray(String[]::new) .

String[] strings = Arrays.stream(line.split(",")).map(String::trim).toArray(String[]::new);

のラムダ式です。

.toArray(new IntFunction<String[]>() {
        @Override
        public String[] apply(int size) {
            return new String[size];
        }
    });

配列を同じ大きさの文字列配列に変換することを指示しているところです。

からは ドキュメント

ジェネレータ関数は、希望する配列のサイズである整数を受け取り、希望するサイズの配列を生成します。これは配列コンストラクタの参照で簡潔に表現することができます。

 Person[] men = people.stream()
                      .filter(p -> p.getGender() == MALE)
                      .toArray(Person[]::new);

型パラメータです。

A - 結果として得られる配列の要素タイプ

パラメータです。

generator - 指定された長さの、指定された型の新しい配列を生成する関数です。