我尝试将以下代码编写为流:
<table>
<tr ng-show="condition1" >
<td>test1 </td><td>some value</td>
</tr>
<tr ng-show="condition1" >
<td>test2</td><td>some value</td>
</tr>
<tr ng-show="condition2" >
<td>test3</td><td>some value</td>
</tr>
<tr ng-show="condition2" >
<td>test4</td><td>some value</td>
</tr>
<tr ng-show="condition2" >
<td>test5</td><td>some value</td>
</tr>
<tr ng-show="condition2" >
<td>test6</td><td>some value</td>
</tr>
</table>
此代码工作正常。
但是,当我像这样重写它时,它不再起作用了:
AbstractDevice myDevice = null;
for (AbstractDevice device : session.getWorkplace().getDevices()) {
if (device.getPluginconfig().getPluginType().getId() == 1) {
myDevice = device;
}
}
我从流中返回的myDevice = session.getWorkplace().getDevices().stream()
.filter(s -> s.getPluginconfig().getPluginType().getId() == 1)
.findFirst().get();
没有值。为什么呢?
修改
当我尝试这个时(我仍然从Optional
获得两个设备):
getDevices()
List<AbstractDevice> testList = session.getWorkplace().getDevices()
.stream().collect(Collectors.toList());
为空。所以我的testList
设备流似乎出了问题?
它是一个JavaEE应用程序,我从相应的实体获取我的设备:
List
答案 0 :(得分:7)
似乎您正在使用2.6版之前的EclipseLink并点击Bug#433075。此devices
字段将替换为IndirectList
(通过反射),它会扩展Vector
类并执行延迟初始化。它是为没有stream()
方法的旧Java版本编写的,因此实际上在未初始化列表上调用stream()
返回空流。
错误是fixed,因此您可能必须将EclipseLink更新为2.6版本。在EclipseLink 2.6中,另一个类是used when running on JDK 1.8,它是流友好的。