1

この Oracle Web サイトでストリームを調べ始めたところです。以下のようなコードを見てすぐに思いついた質問の 1 つは、フィルター ロジックを再利用したい場合 (たとえば、Person で "isAdult" メソッドを使用する場合) です。

これは、パラメーター Person を受け入れないため、ストリームではメソッド参照として機能しません。同様に、パラメーター化可能な「isOlderThan」ロジックを作成するために、年齢を含む追加の int パラメーターを受け入れるフィルターを作成することはできません。

カスタム機能インターフェースと組み合わせてストリームを使用する方法が見つかりませんでした。そのような行動をどのようにモデル化しますか? 上記のシナリオで静的な「isAdult」メソッドを作成することはあまりクリーンなソリューションではなく、そのようなメソッドで「PersonChecker」オブジェクトを作成することもないように感じます。

List<Person> list = roster.parallelStream().filter((p) -> p.getAge() > 18).collect(Collectors.toList()); 

ありがとうございました

4

1 に答える 1

3
List<Person> list = roster.parallelStream().filter((p) -> p.getAge() > 18).collect(Collectors.toList());

フィルタ ロジックを再利用したい場合はどうすればよいですか。

List<Person> list = roster.parallelStream().filter(Person::isAdult).collect(Collectors.toList());

また

List<Person> list = roster.parallelStream().filter(p -> p.isAdult()).collect(Collectors.toList());

パラメーターを使用可能な「isOlderThan」ロジックを作成するために、年齢を含む追加の int パラメーターを受け入れるフィルターを作成することはできません。

List<Person> list = roster.parallelStream().filter(p -> p.isOlderThan(18)).collect(Collectors.toList());

カスタム機能インターフェースがあなたの質問とどのような関係があるのか​​ わかりません。ここで必要な関数インターフェイスは Predicate だけです。ラムダとメソッド参照は、Predicate のインスタンスを作成するための非常に簡単な方法です。

于 2015-05-23T12:16:24.797 に答える