【发布时间】:2015-09-18 12:49:58
【问题描述】:
在 Java 7 中,如果我想获取列表的最后一个非空元素,我会这样写:
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
...
}
我想使用 lambdas 或 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();
}
也许有人知道如何解决这个问题?
【问题讨论】:
-
使用 lambdas 并不总是是个好主意。鉴于@Tunaki 的答案,使用非 lambda 方式对读者来说更清楚。
-
@lschuetze,我刚刚学习了 lambdas 的可能性,我想知道如何使用新功能来解决简单的问题
标签: java lambda java-8 java-stream