我有一个实例列表,我需要使用第一个列表中的实例创建另一个实例列表。 如下所示,我可以使用foreach或for循环。有没有更好的方法来更有效地做到这一点?
List<Mesage> messages;
List<ArchMessage> archMessages = new ArrayList<>();
for(Message message : messages) {
archMessages.add(new ArchMessage(message));
}
答案 0 :(得分:2)
您可以使用Java 8 Stream
s:
List<ArchMessage> archMessages =
messages.stream()
.map(message -> new ArchMessage(message))
.collect(Collectors.toList());
或
List<ArchMessage> archMessages =
messages.stream()
.map(ArchMessage::new)
.collect(Collectors.toList());
答案 1 :(得分:0)
这是有效的,但是假设您的代码可以从并行性中受益,那么使用流API将是理想的,因为我们可以免费获得并行性
使用dotnet publish -c Release -r win10-x64
例如
parallelStream
除此之外,您当前的方法似乎很好并且可读。
答案 2 :(得分:0)
如果您无法使用Java 8中的流,Apache Commons Collections库提供以下内容:
http://commons.apache.org/proper/commons-collections/
Collection<ArchMessage> archMessages = CollectionUtils.collect(messages, new Transformer() {
public Object transform(Object o) {
return new ArchMessage((Mesage) o);
}
});
答案 3 :(得分:0)
对您的recherche的反馈: 我建议不要使用foreach。它会在每个请求中引发内部请求的有效下降原因。我建议每次使用一次..