gpt4 book ai didi

Java 8 流结合了两个不同的集合

转载 作者:行者123 更新时间:2023-11-30 10:42:25 27 4
gpt4 key购买 nike

我还是 Java 8 流的新手,所以我正在弄清楚如何尽可能简单地做到这一点。

我想知道是否有更简单的解决方案来组合两个不同对象的流。

假设我有以下 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()));
});
});
}

所以这里我有两个步骤:

  1. 从存储库中检索数据并构建消息列表
  2. 流式传输 Message 列表并从其他存储库检索数据以进行本地化

这能否以某种方式更简单地重写(例如,在第一步中包含第二步)?

谢谢

最佳答案

localizations 列表的初始化视为 Message 对象初始化的一部分:

public List<Message> getAllMessages() {
return StreamSupport.stream(messageRepository.findAll().spliterator(), false)
.map(message -> {
Message newMessage = new Message(message.getId(), message.getMessageKey());
localizationRepository.findAllByObjectIdAndLocalizedType(message.getId(), LocalizedType.MESSAGE)
.forEach(localization -> {
newMessage.getLocalizations().add(
new MessageLocalization(localization.getId(),
localization.getLanguage(),
localization.getBaseText(),
localization.getShortText(),
localization.getLongText(),
localization.getOrderBy()));
});
return newMessage;
})
.collect(Collectors.toList());
}

这自然会得出这样的结论:如果 Message 构造函数接受本地化列表,代码会更简单……

关于Java 8 流结合了两个不同的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com