写点什么

Java 怎么把多个对象的 list 的数据合并

作者:EquatorCoco
  • 2024-09-13
    福建
  • 本文字数:3108 字

    阅读完需:约 10 分钟

1.示例一:创建几个包含Person对象的 List,并将它们合并成一个新的 List


在 Java 中,将多个对象的 List 合并通常涉及到遍历这些 List 并将它们的元素添加到一个新的 List 中。这里,我将给出一个详细的代码示例,该示例将展示如何将多个包含相同类型对象的 List 合并成一个 List。


假设我们有一个简单的Person类,它有两个属性:nameage。我们将创建几个包含Person对象的 List,并将它们合并成一个新的 List。


首先,定义Person类:


public class Person {      private String name;      private int age;        // 构造方法      public Person(String name, int age) {          this.name = name;          this.age = age;      }        // Getter和Setter      public String getName() {          return name;      }        public void setName(String name) {          this.name = name;      }        public int getAge() {          return age;      }        public void setAge(int age) {          this.age = age;      }        // toString方法,便于打印Person对象      @Override      public String toString() {          return "Person{" +                  "name='" + name + '\'' +                  ", age=" + age +                  '}';      }  }
复制代码


接下来,编写合并 List 的代码:


import java.util.ArrayList;  import java.util.List;    public class ListMerger {      public static void main(String[] args) {          // 创建三个List,每个List包含几个Person对象          List<Person> list1 = new ArrayList<>();          list1.add(new Person("Alice", 30));          list1.add(new Person("Bob", 25));            List<Person> list2 = new ArrayList<>();          list2.add(new Person("Charlie", 35));          list2.add(new Person("David", 40));            List<Person> list3 = new ArrayList<>();          list3.add(new Person("Eve", 28));            // 合并这些List          List<Person> mergedList = mergeLists(list1, list2, list3);            // 打印合并后的List          System.out.println(mergedList);      }        // 合并多个List的方法      public static <T> List<T> mergeLists(List<T>... lists) {          List<T> mergedList = new ArrayList<>();          for (List<T> list : lists) {              if (list != null) {                  mergedList.addAll(list);              }          }          return mergedList;      }  }
复制代码


在这个示例中,我们首先定义了Person类,并为其提供了基本的构造方法、Getter 和 Setter 方法,以及一个toString方法以便于打印。


然后,在ListMerger类中,我们创建了三个包含Person对象的 List,并使用mergeLists方法将它们合并。mergeLists方法接受一个可变数量的 List 参数(通过List<T>... lists实现),然后遍历这些 List,并使用addAll方法将它们添加到mergedList中。注意,在添加之前,我们检查了 List 是否为null,尽管在这个特定的例子中我们并没有创建null的 List。


最后,我们打印了合并后的 List,展示了合并的效果。


这个示例提供了将多个对象的 List 合并成一个 List 的详细步骤,并且代码可以直接运行,具有实际的参考价值和意义。


2.示例二:使用 Java 8 的 Stream API


如果我们使用的是 Java 8 或更高版本,可以利用 Stream API 来更简洁地合并 List。


import java.util.ArrayList;  import java.util.Arrays;  import java.util.List;  import java.util.stream.Collectors;  import java.util.stream.Stream;    public class ListMergerStream {      public static void main(String[] args) {          List<Person> list1 = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25));          List<Person> list2 = Arrays.asList(new Person("Charlie", 35), new Person("David", 40));          List<Person> list3 = Arrays.asList(new Person("Eve", 28));            // 使用Stream API合并List          List<Person> mergedList = Stream.of(list1, list2, list3)                  .flatMap(List::stream)                  .collect(Collectors.toList());            // 打印合并后的List          mergedList.forEach(System.out::println);      }        // 假设Person类和其他部分与之前的示例相同  }
复制代码


在这个示例中,Stream.of(list1, list2, list3)创建了一个包含所有 List 的 Stream,然后flatMap(List::stream)将这个 Stream 中的每个 List 转换成一个新的 Stream,并将这些 Stream 合并成一个 Stream,最后通过collect(Collectors.toList())收集到一个新的 List 中。


3.示例三:使用 Apache Commons Collections


如果我们在我们的项目中使用了 Apache Commons Collections 库,我们可以利用CollectionUtils.union方法来合并 List。但请注意,CollectionUtils.union返回的是一个新的集合,它包含了所有给定集合的元素的视图,但这些元素并不保证是唯一的(除非原始集合中的元素本身就是唯一的)。


然而,对于 List 的合并,我们可能需要一个确实包含所有元素的新 List,而不是一个视图。因此,我们可能需要将结果转换为一个新的 List。但 Apache Commons Collections 本身可能没有直接的方法来做到这一点,所以我们可能仍然需要一些额外的步骤。不过,对于简单的合并操作,我们通常会使用 Java 标准库中的方法或 Stream API。


但如果我们确实想使用 Apache Commons Collections,并且想要一个包含所有元素的新 List,我们可以这样做:


import org.apache.commons.collections4.CollectionUtils;    import java.util.ArrayList;  import java.util.Arrays;  import java.util.Collection;  import java.util.List;    public class ListMergerApache {      public static void main(String[] args) {          // 假设list1, list2, list3已经定义并初始化            // 使用Apache Commons Collections的CollectionUtils来合并(但注意这不是直接支持List的合并)          // 一个简单的方法是使用ArrayList的构造器来接收一个Collection          List<Person> mergedList = new ArrayList<>(CollectionUtils.union(list1, list2, list3));            // 注意:如果list中有重复元素,并且我们想要去重,我们可能需要额外的步骤            // 打印合并后的List          mergedList.forEach(System.out::println);      }        // 假设Person类和其他部分与之前的示例相同        // 注意:CollectionUtils.union在Apache Commons Collections 4中可用,并且它接受可变数量的Collection参数  }
复制代码


但请注意,上面的代码示例中的CollectionUtils.union实际上并不直接支持可变数量的 List 作为参数,而是支持可变数量的 Collection。因此,上面的代码示例在技术上可能不是完全准确的,因为CollectionUtils.union的常用重载方法只接受两个 Collection 参数。如果我们需要合并多于两个的 List,我们可能需要连续调用union或使用其他方法(如 Java 标准库中的方法或 Stream API)。


在实际应用中,由于 Java 标准库已经提供了强大且灵活的工具(如 Stream API),因此通常不需要额外依赖 Apache Commons Collections 来执行基本的集合操作。


文章转载自:TechSynapse

原文链接:https://www.cnblogs.com/TS86/p/18410979

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Java怎么把多个对象的list的数据合并_Java_EquatorCoco_InfoQ写作社区