Ich bin immer noch neu in Java 8 Streams, so dass ich herausfinden, wie es am einfachsten zu tun ist.Java 8 Stream kombinieren zwei verschiedene Sammlungen
Ich würde gerne wissen, ob es eine einfachere Lösung für die Kombination von zwei Streams von verschiedenen Objekten gibt.
Sagen wir, ich habe folgende Java-Objekte.
public class Message {
private String id;
private String key;
private List<MessageLocalization> localizations = new ArrayList<>();
// ...getters setters
}
public class MessageLocalization {
private String id;
private String language;
private String baseText;
private String shortText;
private String longText;
private Integer orderBy = 1;
// ...getters setters
}
und mit der folgenden Methode abrufen ich alle Nachrichten mit ihren Lokalisierungen.
public List<Message> getAllMessages() {
List<Message> messages =
StreamSupport
.stream(messageRepository.findAll().spliterator(), false)
.map(message -> new Message(message.getId(), message.getMessageKey()))
.collect(Collectors.toList());
messages
.stream()
.forEach(message -> {
localizationRepository.findAllByObjectIdAndLocalizedType(message.getId(), LocalizedType.MESSAGE)
.stream()
.forEach(localization -> {
message.getLocalizations().add(
new MessageLocalization(localization.getId(),
localization.getLanguage(),
localization.getBaseText(),
localization.getShortText(),
localization.getLongText(),
localization.getOrderBy()));
});
});
}
hier So habe ich in zwei Schritten:
- Daten aus dem Repository abrufen und Konstruieren
Message
Liste - Streaming
Message
Liste und Daten aus anderen Repository für seine Lokalisierungen
Abrufen von Can das wird irgendwie einfacher umgeschrieben (zum Beispiel den zweiten Schritt in der ersten)?
Dank
Hinweis: Sie fragen im Grunde nach der Verbesserung bestehender, funktionierender Code. Das könnte auch gehen codereview.stackexchange.com – GhostCat