uma*_*uma 8 java lambda java-8 java-stream
我有List对象,如果它不为null或为空,我需要获取列表中的第一个元素.
我使用java编写下面的代码,现在我想将其转换为Java 8.
List<DD> container
A<DD,DI> a;
if(container!=null || !container.isEmpty()){
for(DD dd:container)
{
a = dd.getPrescription();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我这样转换它.
DD detail = container.stream().findFirst().get();
Run Code Online (Sandbox Code Playgroud)
我需要知道这是正确的吗?
您当前的代码存在严重缺陷,即
if(container!=null || !container.isEmpty())
Run Code Online (Sandbox Code Playgroud)
除非将条件运算符更改为,否则这仍然可以抛出NullPointerException(when container == null)&&.发布下面的实现将是我建议遵循的.
它几乎是正确的,因为如果不满足条件,你需要处理一些默认值:
DD detail = container.stream().findFirst().orElse(null); // or some default value instead of 'null'
Run Code Online (Sandbox Code Playgroud)
如果它container本身可以为null,请使用
DD detail = container != null ?
container.stream().findFirst().orElse(null) : null;
Run Code Online (Sandbox Code Playgroud)
如果您需要此对象的处方,请使用map:
container.stream().findFirst().map(DD::getPrescription).orElse(null)
// ^^
// return type of prescription then
Run Code Online (Sandbox Code Playgroud)
使用Java-9,这可能更简单:
A<DD, DI> basePrescription = Stream.ofNullable(container) // Java-9 API
.flatMap(List::stream)
.findFirst()
.map(DD::getPrescription)
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
这样更容易:
A<DD,DI> a = container.get(0).getPrescription();
Run Code Online (Sandbox Code Playgroud)
虽然这是您原始代码的直接翻译,但您可能想要这样的内容:
A<DD,DI> a = container != null && !container.isEmpty()
? container.get(0).getPrescription()
: null;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |