【问题标题】:How to create a list of instances efficiently in java using a another list of instances如何使用另一个实例列表在java中有效地创建实例列表
【发布时间】:2017-12-26 18:31:41
【问题描述】:

我有一个实例列表,我需要使用第一个列表中的实例创建另一个实例列表。 如下所示,我可以使用 foreach 或 for 循环。有没有更好的方法来更有效地做到这一点?

List<Mesage> messages; 
List<ArchMessage> archMessages = new ArrayList<>();
for(Message message : messages) {
       archMessages.add(new ArchMessage(message));
}

【问题讨论】:

  • MessageArcMessage 类之间有什么关系?
  • 您没有足够清楚地定义您的问题/解决方案空间。你说的高效是什么意思?更具可读性?更易维护?最棒的表演?最具可扩展性?
  • 还有其他方法吗?是的。更有效率?没有。
  • @PM77-1 ArchMessage 表示已归档的Message
  • @scottb 我所说的高效是最好的性能和可扩展性。

标签: java list loops


【解决方案1】:

您可以使用 Java 8 Streams:

List<ArchMessage> archMessages =
    messages.stream()
            .map(message -> new ArchMessage(message))
            .collect(Collectors.toList());

List<ArchMessage> archMessages =
    messages.stream()
            .map(ArchMessage::new)
            .collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    如果您无法使用 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】:

      这是最有效的,但是假设您的代码可以从并行性中受益,那么使用流 API 将是理想的,因为我们可以免费获得并行性 通过使用parallelStream 例如

       List<ArchMessage> resultSet = messages.parallelStream()
                                             .map(ArchMessage::new)
                                             .collect(Collectors.toList());
      

      除此之外,您当前的方法似乎很好且可读。

      【讨论】:

        【解决方案4】:

        反馈给您的recherche: 我建议不要使用 foreach。它会在每个地方抛出一个内部请求的有效原因。我建议每次都使用 a ..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-21
          • 2016-06-24
          • 1970-01-01
          • 2022-12-06
          • 2017-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多