一篇文章教你学会:对Java集合进行并集,交集,差集运算

废话不多,直接上代码:

 

目录

1:新建一个实体类

2:准备好数据

3:使用stream 流求

3.1 并集

3.2 交集

3.3 差集

3.31(第一种)

3.32(第二种)

4:使用Goole Guava 工程中的sets 工具包

4.1 引入依赖

4.2 准备数据

4.3 并集

4.4 交集

4.5 差集


1:新建一个实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
   private Integer id;

   private String name;
}

2:准备好数据

public class tset {
   public static void main(String[] args) {
      List<Student> AList = new ArrayList<>(Arrays.asList(
              new Student(1,"张三"),
              new Student(2,"李四"),
              new Student(3,"王五")
      ));

      List<Student> BList = new ArrayList<>(Arrays.asList(
              new Student(2,"李四"),
              new Student(3,"王五"),
              new Student(4,"赵六")
      ));
  }
}

3:使用stream 流求

3.1 并集

Stream的concat() 方法

      //并集  使用Stream的concat()方法将两个集合合并为一个流,
      //然后使用distinct()方法去除重复元素即可求得并集
      List<Student> unionList = Stream.concat(AList.stream(), BList.stream())
              .distinct()
              .collect(Collectors.toList());
      System.out.println(unionList);


打印结果:

[Student(id=1, name=张三), 
Student(id=2, name=李四), 
Student(id=3, name=王五),
Student(id=4, name=赵六)]

3.2 交集

      //AList 和 BList 元素交集(俩个元素中都有的元素)
      List<Student> studentList = AList.
              stream().
              filter(a ->
                      BList.stream()
                              .map(Student::getId)
                              .anyMatch(id ->
                                      Objects.equals(a.getId(), id)))
.collect(Collectors.toList());
      System.out.println("--------AList 和 BList 元素交集:");
      /**
       * --------AList 和 BList 元素交集:
       * [Student(id=2, name=李四), Student(id=3, name=王五)]
       */
      System.out.println(studentList);

3.3 差集

3.31(第一种)
  //BList 和 AList 元素差集  只在B集合中存在,不在A集合中存在
      List<Student> studentList1 = BList.stream()
              .filter(b ->
                      AList.stream()
                              .map(Student::getId)
                              .noneMatch(id -> Objects.equals(b.getId(), id)))
              .collect(Collectors.toList());

      System.out.println("BList 和 AList 元素差集:");
      /**
       * BList 和 AList 元素差集:
       * [Student(id=4, name=赵六)]
       */
      System.out.println(studentList1);
3.32(第二种)
    Map<Integer, Student> map = AList.stream()
              .collect(Collectors.toMap(Student::getId, Function.identity(), (k1, k2) -> k2));
      List<Student> studentList2 = BList.stream()
              .filter(b -> !map.containsKey(b.getId())).collect(Collectors.toList());
      System.out.println("BList 和 AList 元素差集:");
      /**
       * BList 和 AList 元素差集:
       * [Student(id=4, name=赵六)]
       */
      System.out.println(studentList2);

4:使用Goole Guava 工程中的sets 工具包

4.1 引入依赖

       <!-- google java lib -->
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>17.0</version>
		</dependency>

4.2 准备数据

      HashSet<Integer> set = Sets.newHashSet(1, 2, 3, 4, 5, 6);
      HashSet<Integer> set2 = Sets.newHashSet( 3, 4, 5, 6,7,8,9);

4.3 并集

Sets.union()

      //并集
      Sets.SetView<Integer> setView2 = Sets.union(set, set2);
      /**
       * [1, 2, 3, 4, 5, 6, 7, 8, 9]
       */
      System.out.println(setView2);

4.4 交集

Sets.intersection();

  //交集
      Sets.SetView<Integer> setView = Sets.intersection(set, set2);
      /**
       *   [3, 4, 5, 6]
       */
      System.out.println(setView);

4.5 差集

Sets.difference();

 //差集
      Sets.SetView<Integer> setView1 = Sets.difference(set, set2);
      /**
       * [1, 2]
       */
      System.out.println(setView1);

猜你喜欢

转载自blog.csdn.net/XikYu/article/details/132107283