Próbowałem napisać następujący kod jako strumień:Dlaczego ten strumień nie zwraca żadnego elementu?
AbstractDevice myDevice = null;
for (AbstractDevice device : session.getWorkplace().getDevices()) {
if (device.getPluginconfig().getPluginType().getId() == 1) {
myDevice = device;
}
}
ten kod działa poprawnie.
Ale kiedy go przerobić tak, że już nie działa:
myDevice = session.getWorkplace().getDevices().stream()
.filter(s -> s.getPluginconfig().getPluginType().getId() == 1)
.findFirst().get();
Optional
której wrócę ze strumienia nie ma wartości w nim. Czemu?
EDIT
Kiedy próbuję to (ja wciąż dostać dwa urządzenia z powrotem getDevices()
):
List<AbstractDevice> testList = session.getWorkplace().getDevices()
.stream().collect(Collectors.toList());
testList
jest pusty. Wygląda więc na to, że coś jest nie tak ze strumieniem mojego urządzenia List
?
Jest to aplikacja JavaEE i dostaję moje urządzenia z odpowiedniej jednostki:
@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;
}
Czy możesz podać krótki, ale kompletny program demonstrujący problem? Trudno jest zdiagnozować bez możliwości odtworzenia go. –
Oryginalny kod otrzyma ostatni zgodny element z listy, a kod strumienia otrzyma pierwszy. Nie wiem, czy to jest problem w tym przypadku. – WillShackleford
"* Lista, którą otrzymuję z sesji session.getWorkplace.getDevices() ma dwa obiekty *" czy jesteś tego pewien? Również Twoje rozwiązanie nie-strumieniowe wydaje się znajdować ostatni mecz, a nie pierwszy. – Pshemo