java - programacion - ¿Por qué esta secuencia no devuelve ningún elemento?
manual de programacion android pdf (1)
Parece que estás usando EclipseLink antes de la versión 2.6 y presionas el Bug # 433075 . Este campo de devices
se reemplaza con IndirectList
(a través de la reflexión), que amplía la clase Vector
y realiza una inicialización lenta. Fue escrito para una versión anterior de Java que no tenía el método stream()
, por lo que la stream()
se llama realmente en la lista no inicializada y devuelve una secuencia vacía.
El error está solucionado , por lo que probablemente tengas que actualizar EclipseLink a la versión 2.6. En EclipseLink 2.6, se usa otra clase cuando se ejecuta en JDK 1.8, que es compatible con la transmisión.
Traté de escribir el siguiente código como una secuencia:
AbstractDevice myDevice = null;
for (AbstractDevice device : session.getWorkplace().getDevices()) {
if (device.getPluginconfig().getPluginType().getId() == 1) {
myDevice = device;
}
}
este código funciona bien
Pero cuando lo reescribo de esta manera ya no funciona:
myDevice = session.getWorkplace().getDevices().stream()
.filter(s -> s.getPluginconfig().getPluginType().getId() == 1)
.findFirst().get();
El Optional
que obtengo de la transmisión no tiene valores. ¿Por qué?
EDITAR
Cuando pruebo esto (todavía recibo dos dispositivos de getDevices()
):
List<AbstractDevice> testList = session.getWorkplace().getDevices()
.stream().collect(Collectors.toList());
el testList
está vacío. ¿Entonces parece que algo va mal con la transmisión de mi List
de dispositivos?
Es una aplicación JavaEE y obtengo mis dispositivos de la entidad correspondiente:
@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;
}