关于List集合的去重与List集合的并/交/差集

List集合的去重

List集合的去重:转为Set集合进行去重:

public void test2() {
    // 准备数据
    Integer[] arr = {42, 14, 28, 34, 56, 2, 14};
    List list = new ArrayList(Arrays.asList(arr));
    // 准备set集合
    Set set = new HashSet();
    set.addAll(list);
    // 清空list原数据,并将新的去重后的数据进行一个添加
    list.clear();
    // 将指定集合中的所有元素追加到此列表的末尾
    list.addAll(set);
    System.out.println("List=>" + list);
    System.out.println("Set=>" + set);
}

 注意:如果List集合中存放的是对象的话,通过Set集合去重需要需要注意,需要在对象中重写HashCode跟equals方法。

List集合的去重:通过List的contains

public void test2() {
    // 准备数据
    Integer[] arr = {42, 14, 28, 34, 56, 2, 14};
    List<Integer> list = new ArrayList<>(Arrays.asList(arr));
    // 创建一个新的List集合,用于保存去重重复数据的集合
    List<Integer> newList = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        // 判断newList集合中是否包含元素信息
        if (!newList.contains(list.get(i))) {
            newList.add(list.get(i));
        }
    }
    System.out.println("List=>" + newList);
}

List集合的去重:通过Stream流

public void test2() {
    // 准备数据
    Integer[] arr = {42, 14, 28, 34, 56, 2, 14};
    List list = new ArrayList(Arrays.asList(arr));
    // 使用JDK8的Stream流进行去重
    List newList = (List) list.stream().distinct().collect(Collectors.toList());
    System.out.println("List=>" + newList);
}

List集合获取数据的并交差集:

转载链接:https://www.cnblogs.com/zhaobinrui/p/14628618.html

Java8之前:

并集

并集 两个集合中去掉重复的数据就是并集

@Test
public void testSet2(){
    Set<String> set1 = new HashSet<>();
    Set<String> set2 = new HashSet<>();
    set1.add("a");
    set1.add("b");
    set1.add("c");
    
    set2.add("c");
    set2.add("d");
    set2.add("e");
    // 并集
    set1.addAll(set2);
    System.out.println("并集是" + set1);  // 并集是[a b c d e]
}

交集

交集 两个集合中有相同的元素 抽取出来的数据就是为交集

@Test
public void testSet1(){
    Set<String> set1 = new HashSet<>();
    Set<String> set2 = new HashSet<>();
    set1.add("a");
    set1.add("b");
    set1.add("c");
    
    set2.add("c");
    set2.add("d");
    set2.add("e");
    // 交集
    set1.retainAll(set2);
    System.out.println("交集是" + set1);  // 交集是 c
}

差集

差集 第一个集合中的数据在第二个集合中有重复时,去掉重复数据的第一个集合就是差集

@Test
public void testSet3(){
    Set<String> set1 = new HashSet<>();
    Set<String> set2 = new HashSet<>();
    set1.add("a");
    set1.add("b");
    set1.add("c");
    
    set2.add("c");
    set2.add("b");
    set2.add("e");
    // 差集
    set1.removeAll(set2);
    System.out.println("差集是" + set1); // 差集是 a b  去掉set1中属于set2的元素
}

Java8之后:

@Test
public void test1(){
    List<Integer> list1 = new ArrayList<>();
    list1.add(1);
    list1.add(2);
    list1.add(3);
    
    List<Integer> list2 = new ArrayList<>();
    list2.add(3);
    list2.add(4);
    list2.add(5);
    System.out.println("==========求交集==========");
    List<Integer> list = list1.stream().filter(t->list2.contains(t)).collect(Collectors.toList());
    list.stream().forEach(System.out::println);
    
    System.out.println("==========求差集==========");
    list = list1.stream().filter(t-> !list2.contains(t)).collect(Collectors.toList());
    list.stream().forEach(System.out::println);
    
    System.out.println("==========求并集==========");
    list.addAll(list1);
    list.addAll(list2);
    list = list.stream().distinct().collect(Collectors.toList());
    list.stream().forEach(System.out::println);
}

 

posted @ 2021-05-23 18:13  Java小白的搬砖路  阅读(202)  评论(0编辑  收藏  举报