Ich habe versucht, den folgenden Code als Stream zu schreiben:Warum gibt dieser Stream kein Element zurück?
AbstractDevice myDevice = null;
for (AbstractDevice device : session.getWorkplace().getDevices()) {
if (device.getPluginconfig().getPluginType().getId() == 1) {
myDevice = device;
}
}
dieser Code funktioniert gut.
Aber wenn ich es so umschreiben es nicht mehr funktioniert:
myDevice = session.getWorkplace().getDevices().stream()
.filter(s -> s.getPluginconfig().getPluginType().getId() == 1)
.findFirst().get();
Die Optional
, die ich aus dem Strom erhalten hat darin keine Werte. Warum?
EDIT
Wenn ich das versuchen (ich zwei Geräte von getDevices()
immer noch zurück):
List<AbstractDevice> testList = session.getWorkplace().getDevices()
.stream().collect(Collectors.toList());
die testList
leer. So scheint es wie etwas schief geht mit dem Strom meiner List
Geräte?
Es ist eine JavaEE Anwendung und ich meine Geräte aus der entsprechenden Einheit:
@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;
}
Können Sie ein kurzes, aber vollständiges Programm zur Veranschaulichung des Problems bereitstellen? Es ist schwer zu diagnostizieren, ohne es reproduzieren zu können. –
Der ursprüngliche Code würde das letzte übereinstimmende Element von der Liste entfernen, während der Stream-Code den ersten erhalten würde. Ich weiß nicht, ob das in diesem Fall das Problem ist. – WillShackleford
"* Die Liste, die ich von session.getWorkplace.getDevices() zurückbekomme, enthält zwei Objekte *" Bist du dir sicher? Auch Ihre Nicht-Stream-Lösung scheint die letzte Übereinstimmung zu finden, nicht die erste. – Pshemo