一つの方法は、
Spliterator<String> sp = getDummyList().spliterator();
if(sp.tryAdvance(token -> System.out.println("this is first token: "+token))) {
StreamSupport.stream(sp, false).forEach(System.out::println);
}
任意
Collection
Sで動作
だけでなくList
Sであり、潜在的に、より効率的な場合skip
ベースのソリューションよりもクリーンであろうより高度なStream
操作がチェーンされています。このパターンは、Stream
ソースにも適用できます。つまり、複数のトラバーサルが不可能であったり、異なる結果になる可能性がある場合です。
Spliterator<String> sp=getDummyList().stream().filter(s -> !s.isEmpty()).spliterator();
if(sp.tryAdvance(token -> System.out.println("this is first non-empty token: "+token))) {
StreamSupport.stream(sp, false).map(String::toUpperCase).forEach(System.out::println);
}
しかし、最初の要素の特別な治療はまだ平等にすべてのストリーム要素の処理に比べて、パフォーマンスの低下を引き起こす可能性があります。私はあなたのアプローチはすでにクリーンかつ簡潔であることを考える
Iterator<String> tokens = getDummyList().iterator();
if(tokens.hasNext())
System.out.println("this is first token:" + tokens.next());
tokens.forEachRemaining(System.out::println);
:) – TheLostMind
私は防ぐことだろう一つのこと:
あなたがしたいすべてが
forEach
のようなアクションを適用している場合は、あなたもIterator
を使用することができますNPEは 'トークン'がヌルであることも確認しています – TheLostMindはい、質問を説明するためのダミーコードです。私はストリーミングコール内の条件を合併していくつかの回線数を減らす方法があるかどうか疑問に思っていました。 –