欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java兩個(gè)集合取差集4種方式舉例

 更新時(shí)間:2024年08月03日 10:30:45   作者:只吹45°風(fēng)  
在Java?編程中,經(jīng)常需要對集合進(jìn)行一些操作,比如取兩個(gè)集合的交集、并集和差集,下面這篇文章主要給大家介紹了關(guān)于Java兩個(gè)集合取差集的4種方式,需要的朋友可以參考下

開發(fā)中比較兩個(gè)集合的不同點(diǎn),例如需要對于兩個(gè)集合取差集,下面列舉了幾種方式。

方式1:使用Java 8的Stream流

整個(gè)集合過濾

   List<String> list1 = Arrays.asList("a", "b", "c", "d");
   List<String> list2 = Arrays.asList("c", "d", "e", "f");

   // 獲取差集
   List<String> difference1 = list1.stream()
       .filter(element -> !list2.contains(element))
       .collect(Collectors.toList());

   // 獲取list2中不在list1的元素
   List<String> difference2 = list2.stream()
       .filter(element -> !list1.contains(element))
       .collect(Collectors.toList());

根據(jù)集合中對象的屬性來過濾

   // 根據(jù)集合中對象的name屬性來過濾
    public void testStreamNoneMatch(List<StudentDTO> originalDto, List<StudentDTO> newDto) {
        List<StudentDTO> boy = originalDto.stream()
                .filter(item -> item.getGender() == 1
                        && newDto.stream().anyMatch(dto -> dto.getName().equals(item.getName()))).collect(Collectors.toList());
        log.info("性別為男生,且名字相同的人員為{}", JSONObject.toJSONString(boy));
    }

方式2:使用Java集合類的removeAll()方法

   List<String> list1Copy = new ArrayList<>(list1);
   List<String> list2Copy = new ArrayList<>(list2);

   // 獲取list1中不在list2的元素
   list1Copy.removeAll(list2);
   List<String> difference1 = list1Copy;

   // 獲取list2中不在list1的元素
   list2Copy.removeAll(list1);
   List<String> difference2 = list2Copy;

方式3:使用Google Guava庫的Sets.difference()方法

 List<String> list1 = ...;
   List<String> list2 = ...;

   // 獲取list1中不在list2的元素
   Set<String> set1 = Sets.newHashSet(list1);
   Set<String> set2 = Sets.newHashSet(list2);
   Set<String> difference1 = Sets.difference(set1, set2);

   // 獲取list2中不在list1的元素
   Set<String> difference2 = Sets.difference(set2, set1);

方式4:使用Apache Commons Collections的ListUtils.subtract()方法

   List<String> list1 = ...;
   List<String> list2 = ...;

   // 獲取list1中不在list2的元素
   List<String> difference1 = ListUtils.subtract(list1, list2);

   // 獲取list2中不在list1的元素
   List<String> difference2 = ListUtils.subtract(list2, list1);

注意:方式有很多,大家可根據(jù)項(xiàng)目需求和已引入的庫,選擇合適的方法來計(jì)算集合的差集。

附:取重復(fù)元素

方法一:使用HashSet

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ListUtils {
    /**
     * 找出兩個(gè)List中的重復(fù)元素
     * @param list1 第一個(gè)List
     * @param list2 第二個(gè)List
     * @return 重復(fù)的元素集合
     */
    public static <T> List<T> findDuplicateElements(List<T> list1, List<T> list2) {
        Set<T> set1 = new HashSet<>(list1); // 將List1轉(zhuǎn)換為Set,去除重復(fù)元素
        Set<T> duplicateSet = new HashSet<>();
        
        for (T element : list2) { // 遍歷List2的元素
            if (set1.contains(element)) { // 如果Set1中包含List2的元素
                duplicateSet.add(element); // 將重復(fù)的元素添加到重復(fù)元素的Set中
            }
        }
        
        return new ArrayList<>(duplicateSet); // 將重復(fù)元素的Set轉(zhuǎn)換回List并返回
    }
}

方法二:使用Stream API

import java.util.*;
import java.util.stream.Collectors;
public class Main {
    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);
        // 將列表轉(zhuǎn)換為Stream
        Stream<Integer> stream1 = list1.stream();
        Stream<Integer> stream2 = list2.stream();
        // 找出兩個(gè)Stream的重復(fù)元素
        List<Integer> commonElements = Stream.concat(stream1, stream2)
                                             .distinct()
                                             .collect(Collectors.toList());
        // 打印出重復(fù)元素
        System.out.println(commonElements);
    }
}

方法三:使用HashMap

import java.util.*;
public class Main {
    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8);
        // 將列表轉(zhuǎn)換為HashMap
        Map<Integer, Integer> map = new HashMap<>();
        list1.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1));
        list2.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1));
        // 找出HashMap中值大于1的鍵,即為重復(fù)元素
        List<Integer> commonElements = map.entrySet().stream()
                                         .filter(x -> x.getValue() > 1)
                                         .map(Map.Entry::getKey)
                                         .collect(Collectors.toList());
        // 打印出重復(fù)元素
        System.out.println(commonElements);
    }
}

總結(jié)

到此這篇關(guān)于Java兩個(gè)集合取差集4種方式的文章就介紹到這了,更多相關(guān)Java兩個(gè)集合取差集內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論