为什么此流不返回任何元素?

阿德里安·克雷布斯(Adrian Krebs)

我试图将以下代码编写为流:

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是空的。如此看来,我List的设备流出现了问题?

这是一个JavaEE应用程序,我从相应的实体获得我的设备:

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
@JoinTable(name = "Workplace_AbstractDevice",
            joinColumns = {
                @JoinColumn(name = "Workplace", referencedColumnName = "ID")
            },
            inverseJoinColumns = {
                @JoinColumn(name = "AbstractDevice", referencedColumnName = "ID")
            })
@OrderColumn
private List<AbstractDevice> devices = new ArrayList<AbstractDevice>();


public List<AbstractDevice> getDevices() {
    return devices;
}
塔吉尔·瓦列夫

似乎您正在使用2.6之前的EclipseLink,并遇到了Bug#433075devices字段被替换IndirectList(通过反射),该扩展了Vector类并执行了延迟初始化。它是为较旧的Java版本编写的,该版本没有stream()方法,因此stream()实际上是在未初始化的列表上调用并返回空流的。

该错误已修复,因此您可能必须将EclipseLink更新为2.6版本。在EclipseLink 2.6中,当在对流友好的JDK 1.8运行时,使用另一个类

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章