1. ホーム
  2. java

[解決済み] Java 8 Lambdaによる配列のフィルタリング

2023-06-30 17:04:32

質問

私は double[] を追加することなく、一行で負の値をフィルタリングしたい(含まない新しい配列を作成したい)。 for ループを追加することなく、1行で負の値をフィルタリングしたい(負の値のない新しい配列を作成したい)。これは、Java 8のラムダ式を使用して可能ですか?

pythonではジェネレータを使用してこのようになります。

[i for i in x if i > 0]

Java8で同じような簡潔なことは可能でしょうか?

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

はい、これは DoubleStream を作成し、負の部分をフィルタリングして、 ストリームを配列に戻すことで可能です。以下はその例です。

double[] d = {8, 7, -6, 5, -4};
d = Arrays.stream(d).filter(x -> x > 0).toArray();
//d => [8, 7, 5]

でない参照配列をフィルタリングしたい場合、その配列は Object[] でない参照配列をフィルタリングしたい場合は toArray メソッドを使用する必要があります。 IntFunction を受け取り、結果として元の型の配列を得ます。

String[] a = { "s", "", "1", "", "" };
a = Arrays.stream(a).filter(s -> !s.isEmpty()).toArray(String[]::new);