最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java兩個集合取差集4種方式舉例

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

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

方式1:使用Java 8的Stream流

整個集合過濾

   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ù)項目需求和已引入的庫,選擇合適的方法來計算集合的差集。

附:取重復元素

方法一:使用HashSet

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

public class ListUtils {
    /**
     * 找出兩個List中的重復元素
     * @param list1 第一個List
     * @param list2 第二個List
     * @return 重復的元素集合
     */
    public static <T> List<T> findDuplicateElements(List<T> list1, List<T> list2) {
        Set<T> set1 = new HashSet<>(list1); // 將List1轉(zhuǎn)換為Set,去除重復元素
        Set<T> duplicateSet = new HashSet<>();
        
        for (T element : list2) { // 遍歷List2的元素
            if (set1.contains(element)) { // 如果Set1中包含List2的元素
                duplicateSet.add(element); // 將重復的元素添加到重復元素的Set中
            }
        }
        
        return new ArrayList<>(duplicateSet); // 將重復元素的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();
        // 找出兩個Stream的重復元素
        List<Integer> commonElements = Stream.concat(stream1, stream2)
                                             .distinct()
                                             .collect(Collectors.toList());
        // 打印出重復元素
        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的鍵,即為重復元素
        List<Integer> commonElements = map.entrySet().stream()
                                         .filter(x -> x.getValue() > 1)
                                         .map(Map.Entry::getKey)
                                         .collect(Collectors.toList());
        // 打印出重復元素
        System.out.println(commonElements);
    }
}

總結(jié)

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

相關文章

  • 獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式

    獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式

    這篇文章主要介紹了獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中策略設計模式的實現(xiàn)及應用場景

    Java中策略設計模式的實現(xiàn)及應用場景

    策略設計模式是Java中一種常用的設計模式,它通過定義一系列算法并將其封裝成獨立的策略類,從而使得算法可以在不影響客戶端的情況下隨時切換。策略設計模式主要應用于系統(tǒng)中存在多種相似的算法、需要靈活調(diào)整算法邏輯或者需要擴展新的算法等場景
    2023-04-04
  • SpringBoot中定制異常頁面的實現(xiàn)方法

    SpringBoot中定制異常頁面的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot中定制異常頁面的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 詳解Java動態(tài)代理的實現(xiàn)及應用

    詳解Java動態(tài)代理的實現(xiàn)及應用

    這篇文章主要介紹了詳解Java動態(tài)代理的實現(xiàn)及應用的相關資料,希望通過本文大家能理解掌握Java動態(tài)代理的使用方法,需要的朋友可以參考下
    2017-09-09
  • springboot手動動態(tài)注入controller和service方式

    springboot手動動態(tài)注入controller和service方式

    這篇文章主要介紹了springboot手動動態(tài)注入controller和service方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • idea運行java的配置詳細教程(包含maven,mysql下載配置)

    idea運行java的配置詳細教程(包含maven,mysql下載配置)

    程序員們在開發(fā)的時候,一定會用到Intellij?IDEA這個集成開發(fā)環(huán)境,這篇文章主要給大家介紹了關于idea運行java的配置(包含maven,mysql下載配置)的相關資料,需要的朋友可以參考下
    2024-05-05
  • MyBatis傳入?yún)?shù)的實例代碼

    MyBatis傳入?yún)?shù)的實例代碼

    這篇文章主要介紹了MyBatis傳入?yún)?shù)的實例代碼的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Java基于redis和mysql實現(xiàn)簡單的秒殺(附demo)

    Java基于redis和mysql實現(xiàn)簡單的秒殺(附demo)

    這篇文章主要介紹了Java基于redis和mysql實現(xiàn)簡單的秒殺(附demo),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • java 查找list中重復數(shù)據(jù)實例詳解

    java 查找list中重復數(shù)據(jù)實例詳解

    這篇文章主要介紹了java 查找list中重復數(shù)據(jù)實例詳解的相關資料,需要的朋友可以參考下
    2017-01-01
  • Spring占位符Placeholder的實現(xiàn)原理解析

    Spring占位符Placeholder的實現(xiàn)原理解析

    這篇文章主要介紹了Spring占位符Placeholder的實現(xiàn)原理,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論

平泉县| 大关县| 安远县| 郸城县| 岑巩县| 成武县| 上犹县| 新和县| 丹东市| 阳东县| 西平县| 洱源县| 武安市| 罗城| 贵溪市| 高陵县| 安庆市| 江阴市| 九江县| 房产| 白河县| 白山市| 库尔勒市| 漾濞| 克拉玛依市| 周口市| 富顺县| 白银市| 谷城县| 垫江县| 湄潭县| 汉寿县| 余姚市| 晋州市| 射洪县| 确山县| 连平县| 百色市| 大城县| 贵南县| 珲春市|