有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用另一个实例列表在java中高效地创建实例列表

我有一个实例列表,需要使用第一个列表中的实例创建另一个实例列表。 如下图所示,我可以使用foreach或for循环。有没有更好的方法来提高效率

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

共 (4) 个答案

  1. # 1 楼答案

    您可以使用Java 8Stream

    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. # 2 楼答案

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

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

    除此之外,你目前的方法看起来不错,可读性强

  3. # 3 楼答案

    反馈给你的同事: 我建议不要使用foreach。它会让你的效率下降,因为每次都会有一个内在的要求。我建议每次都使用a

  4. # 4 楼答案

    如果无法使用来自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);
        }
    });