はい、あなたはです。は、findFirst
の後にmap
を使用します。ここで知るべき重要なことは、findFirst()がOptional
を返すため、オプションが値を持っているかどうか最初にチェックすることなく戻り値を単純に使うことはできません。以下のスニペットは、Personクラスのオブジェクトのリストを使って作業していることを前提としています。あなたがtoUpperCase
を使用していたところ、スニペットと
Optional<String> result = this.list.stream()
.filter(t -> t.name.equals("pavan")) // Returns a stream consisting of the elements of this stream that match the given predicate.
.findFirst() // Returns an Optional describing the first element of this stream, or an empty Optional if the stream is empty. If the stream has no encounter order, then any element may be returned.
.map(p -> p.name.toUpperCase()); // If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise return an empty Optional.
// This check is required!
if (result.isPresent()) {
String name = result.get(); // If a value is present in this Optional, returns the value, otherwise throws NoSuchElementException.
System.out.println(name);
} else {
System.out.println("pavan not found!");
}
つ以上のエラーでした。あなたのスニペットで渡されていた暗黙の引数はPersonクラスのオブジェクトでしたが、Stringが必要です。
あなたはそれを試して何が起こったのですか? 'map(t - > t.name.toUpperCase())'を使うとうまくいくかもしれません。 – Andreas
また、 'list.stream()。map(t - > t.name).filter(n - > n.equals(" pavan "))を試すこともできます。findFirst()。map(String :: toUpperCase).orElse (ヌル) '。最初の 'map()'は中間ストリーム操作ですが、 'map()'はストリーム操作ではありません。それは 'オプション'の方法です。 – Andreas
(無関係)orElse(null)を使用したくない場合は、結果としてOptionalを指定するだけです。 –