ほとんどすべての人と同じように、私はまだ新しいJava 8 Streams APIの複雑さを学んでいます(そしてそれらを愛しています)。ストリームの使用方法について質問があります。簡単な例を示します。
Java Streamsを使用すると、を取得しCollection
、そのstream()
メソッドを使用して、すべての要素のストリームを受け取ることができます。その中に、便利なような方法がいくつかあるfilter()
、map()
とforEach()
私たちは内容にラムダ操作を使用することができ、。
次のようなコードがあります(簡略化)。
set.stream().filter(item -> item.qualify())
.map(item -> (Qualifier)item).forEach(item -> item.operate());
set.removeIf(item -> item.qualify());
アイデアは、特定の修飾子に一致するセット内のすべてのアイテムのマッピングを取得し、それらを操作することです。手術後、それらはそれ以上の目的を果たさないため、元のセットから削除する必要があります。コードはうまく機能しますが、これを行うことができる操作がStream
1行であるという感覚を揺るがすことはできません。
Javadocにある場合は、見落としている可能性があります。
APIに慣れている人は、そのようなことを知っていますか?
あなたはこのようにそれを行うことができます:
set.removeIf(item -> {
if (!item.qualify())
return false;
item.operate();
return true;
});
場合はitem.operate()
、常に返しますtrue
、あなたは非常に簡潔にそれを行うことができます。
set.removeIf(item -> item.qualify() && item.operate());
しかし、何が起こっているのかすぐにはっきりしないので、私はこれらのアプローチが好きではありません。個人的には、for
ループとを引き続き使用しますIterator
。
for (Iterator<Item> i = set.iterator(); i.hasNext();) {
Item item = i.next();
if (item.qualify()) {
item.operate();
i.remove();
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加