¿Por qué este flujo no devuelve ningún elemento?

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 así ya no funciona:

myDevice = session.getWorkplace().getDevices().stream()
                  .filter(s -> s.getPluginconfig().getPluginType().getId() == 1)
                  .findFirst().get();

losOptional que recupero de la secuencia no tiene valores. ¿Por qué?

EDITAR

Cuando intento esto (todavía recibo dos dispositivos degetDevices()):

 List<AbstractDevice> testList = session.getWorkplace().getDevices()
                                        .stream().collect(Collectors.toList());

eltestList esta vacio. Entonces parece que algo sale mal con la corriente de miList 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;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta