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

Java中Stream流去除List重復元素的方法

 更新時間:2022年04月06日 16:54:00   作者:BirdMan98  
這篇文章主要為大家詳細介紹了Java中Stream流去除List重復元素的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java中Stream流去除List重復元素的具體代碼,供大家參考,具體內(nèi)容如下

業(yè)務場景

在開發(fā)中我們常常需要過濾List中的重復對象,而重復的定義往往是根據(jù)單個條件或者多個條件,如果是單個條件的話還是比較好處理的,即使不使用工具,代碼也可以很容易實現(xiàn),但如果判斷依據(jù)不是單個條件,而是多個條件的話,代碼實現(xiàn)起來就會比較復雜,此時我們一般就會使用工具來簡化開發(fā)

單條件去重代碼

ArrayList<listData> collect = list.stream().collect(Collectors.collectingAndThen(
? ? ? ? ? Collectors.toCollection(() -> new TreeSet<>(
? ? ? ? ? ? Comparator.comparing(
? ? ? ? listData::getId))), ArrayList::new));

解釋

list-列表
listData-列表中存的對象
id是判斷是否重復的條件,只保留唯一id對象

多條件去重代碼

ArrayList<listData> collect = list.stream().collect(Collectors.collectingAndThen(
? ? ?Collectors.toCollection(() -> new TreeSet<>(
? ? ? ?Comparator.comparing(p->p.getPatentName() + ";" + p.getLevel()))), ArrayList::new));

測試代碼

import java.util.*;
import java.util.stream.Collectors;

public class ExcelUtil {

? ? private static String[] params = {"p001","p002","p003","p004"};

? ? public static void main(String[] args) {

? ? ? ? List<Datum> dataList = new ArrayList<>();

? ? ? ? for (int i = 0; i < 100; i++) {
? ? ? ? ? ? if (i%2==0){
? ? ? ? ? ? ? ? Datum datum = new Datum(
? ? ? ? ? ? ? ? ? ? ? ? params[new Random().nextInt(params.length)],
? ? ? ? ? ? ? ? ? ? ? ? params[new Random().nextInt(params.length)],
? ? ? ? ? ? ? ? ? ? ? ? params[new Random().nextInt(params.length)],
? ? ? ? ? ? ? ? ? ? ? ? params[new Random().nextInt(params.length)],
? ? ? ? ? ? ? ? ? ? ? ? params[new Random().nextInt(params.length)]
? ? ? ? ? ? ? ? );
? ? ? ? ? ? ? ? dataList.add(datum);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ??
? ? ? ? System.out.println("0 size : "+dataList.size()+" -> "+dataList);

? ? ? ? // 單條件
? ? ? ? ArrayList<Datum> collect1 = dataList.stream().collect(Collectors.collectingAndThen(
? ? ? ? ? ? ? ? Collectors.toCollection(() -> new TreeSet<Datum>(
? ? ? ? ? ? ? ? ? ? ? ? Comparator.comparing(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Datum::getId))), ArrayList::new));

? ? ? ? System.out.println("1 size : "+collect1.size()+" -> "+collect1);

? ? ? ? // 兩個條件
? ? ? ? ArrayList<Datum> collect2 = dataList.stream().collect(Collectors.collectingAndThen(
? ? ? ? ? ? ? ? Collectors.toCollection(() -> new TreeSet<>(
? ? ? ? ? ? ? ? ? ? ? ? Comparator.comparing(p->p.getId() + ";" + p.getAddress()))), ArrayList::new));

? ? ? ? System.out.println("2 size : "+collect2.size()+" -> "+collect2);

? ? ? ? // 三個條件
? ? ? ? ArrayList<Datum> collect3 = dataList.stream().collect(Collectors.collectingAndThen(
? ? ? ? ? ? ? ? Collectors.toCollection(() -> new TreeSet<>(
? ? ? ? ? ? ? ? ? ? ? ? Comparator.comparing(p->p.getInfo() + ";" + p.getAddress()+";"+p.getName()))), ArrayList::new));

? ? ? ? System.out.println("3 size : "+collect3.size()+" -> "+collect3);

? ? }

}

效果

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • IDEA 如何導入別人的javaweb項目進行部署

    IDEA 如何導入別人的javaweb項目進行部署

    這篇文章主要介紹了IDEA 如何導入別人的javaweb項目進行部署,本文給大家分享我的詳細部署過程及遇到問題解決方法,需要的朋友可以參考下
    2023-03-03
  • JAVA mongodb 聚合幾種查詢方式詳解

    JAVA mongodb 聚合幾種查詢方式詳解

    這篇文章主要介紹了JAVA mongodb 聚合幾種查詢方式詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • java 實現(xiàn)比較版本號功能

    java 實現(xiàn)比較版本號功能

    本篇文章主要介紹了java 中涉及到客戶端的系統(tǒng)經(jīng)常需要用到比較版本號的功能,并附小示例,希望能幫助需要的小伙伴
    2016-07-07
  • 教你使用eclipse?搭建Swt?環(huán)境的全過程

    教你使用eclipse?搭建Swt?環(huán)境的全過程

    本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Mybatis空值關聯(lián)的問題解析及解決方案

    Mybatis空值關聯(lián)的問題解析及解決方案

    這篇文章給大家介紹了Mybatis空值關聯(lián)的問題解析及解決方案,文中通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 簡單通用JDBC輔助類封裝(實例)

    簡單通用JDBC輔助類封裝(實例)

    下面小編就為大家?guī)硪黄唵瓮ㄓ肑DBC輔助類封裝(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • SpringCloud Eureka自我保護機制原理解析

    SpringCloud Eureka自我保護機制原理解析

    這篇文章主要介紹了SpringCloud Eureka自我保護機制原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • JPA-JpaRepository方法命名語法說明

    JPA-JpaRepository方法命名語法說明

    這篇文章主要介紹了JPA-JpaRepository方法命名語法說明,具有很好的參考價值。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringSecurity跨域請求偽造(CSRF)的防護實現(xiàn)

    SpringSecurity跨域請求偽造(CSRF)的防護實現(xiàn)

    本文主要介紹了SpringSecurity跨域請求偽造(CSRF)的防護實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 8種常見的接口請求重試方法總結(jié)

    8種常見的接口請求重試方法總結(jié)

    在跨境業(yè)務中,可能第三方的服務器分布在世界的各個角落,所以請求三方接口的時候,難免會遇到一些網(wǎng)絡問題,這時候需要加入重試機制了,下面小編就給大家分享幾個接口重試的寫法吧
    2023-11-11

最新評論