を使用して、リストのないヌル要素が続か取得:私が書きたい私はリストの最後のnullでない要素を取得したい場合、私はこのような何か書き、Javaの7でJava 8
public CustomObject getLastObject(List<CustomObject> list) {
for (int index = list.size() - 1; index > 0; index--) {
if (list.get(index) != null) {
return list.get(index);
}
}
// handling of case when all elements are null
// or list is empty
...
}
をラムダまたは私が最初ではないヌルの要素を取得したい場合たとえば、私はこれを書くことができるのJava 8の他の機能を使用して、短いコード:
public void someMethod(List<CustomObject> list) {
.....
CustomObject object = getFirstObject(list).orElseGet(/*handle this case*/);
.....
}
public Optional<CustomObject> getFirstObject(List<CustomObject> list) {
return list.stream().filter(object -> object != null).findFirst();
}
はたぶん誰かがこの問題を解決する方法を知っていますか?ストリームは必ずしも発注されていないため、ストリームAPIにはfindLast
方法がないこと
public Optional<CustomObject> getLastObject(List<CustomObject> list) {
return IntStream.range(0, list.size()).mapToObj(i -> list.get(list.size() - i - 1))
.filter(Objects::nonNull)
.findFirst();
}
注:
ラムダを使用することは常に**良いアイデアではありません。 @ Tunakiの答えが与えられれば、それは非ラムダの方法を使って読者にはっきりと分かります。 – lschuetze
関連:[Java 8で逆順でリストから順序付けされたストリームを取得する方法](http://stackoverflow.com/q/29403614/2711488)および["ストリームの最後の要素を取得する最も効率的な方法"](http://stackoverflow.com/q/27547519/2711488) – Holger
@lschuetze、私はラムダの可能性を学ぶだけで、私はどのように新しい機能を使って簡単な問題を決めることができるか知りたいです – ZhenyaM