私はまだJava 8ストリームには新しく、できるだけシンプルにする方法を考えています。Java 8ストリームは2つの異なるコレクションを結合します
異なるオブジェクトの2つのストリームを結合するためのより簡単なソリューションがあるかどうかを知りたいと思います。
次のようなjavaオブジェクトがあるとします。
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
}
以下のメソッドを使用して、ローカライズされたすべてのメッセージを取得しています。
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()));
});
});
}
だからここに私は2つのステップがあります。
- リポジトリからデータを取得し、
Message
リストを構築 Message
リストをストリーミングし、そのローカライズのために、他のリポジトリからデータを取得
できますこれは何とか簡単に書き直すことができます(たとえば、最初のステップに2番目のステップが含まれます)。
おかげ
ヒント:基本的には、既存の作業コードの改善について質問しています。それはまたcodereview.stackexchange.com – GhostCat