次のコードで、ストリームまたはリストの最後の要素を取得するにはどうすればよいですか?
はどこdata.careas
ですかList<CArea>
:
CArea first = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal).findFirst().get();
CArea last = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal)
.collect(Collectors.toList()).; //how to?
ご覧のとおり、特定の を使用して最初の要素を取得するのfilter
は難しくありません。
ただし、ワンライナーの最後の要素を取得するのは本当に面倒です。
- から直接取得できないようです
Stream
。(有限ストリームの場合にのみ意味があります) - また、インターフェイスから
first()
やのようなものを取得できないようです。これは本当に苦痛です。last()
List
そこの要素は順序付けられており、さらにサイズがわかっているため、インターフェイスにfirst()
andlast()
メソッドを提供しないという議論はありません。List
しかし、元の回答によると、有限の最後の要素を取得する方法はStream
?
個人的に、これは私が得ることができる最も近いものです:
int lastIndex = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal)
.mapToInt(c -> data.careas.indexOf(c)).max().getAsInt();
CArea last = data.careas.get(lastIndex);
ただし、indexOf
すべての要素を使用する必要がありますが、これはパフォーマンスを損なう可能性があるため、通常は望ましくありません。