国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java通過(guò)Lambda表達(dá)式根據(jù)指定字段去除重復(fù)數(shù)據(jù)(集合去重)

這篇具有很好參考價(jià)值的文章主要介紹了Java通過(guò)Lambda表達(dá)式根據(jù)指定字段去除重復(fù)數(shù)據(jù)(集合去重)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

這里博主給大家封裝好了一個(gè)工具類(lèi),里面有兩個(gè)方法。

  • 方法一:可以根據(jù)指定字段去除重復(fù)數(shù)據(jù)。
  • 方法二:可以獲取到重復(fù)的數(shù)據(jù)。

大家在使用過(guò)程中直接拷貝下方代碼在要去重的類(lèi)中調(diào)用即可。

package com.jzmy.specialist.entity.util;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * 操作去重工具類(lèi)
 * @author mengzhichao
 * @create 2022-11-02-15:15
 */
public class DeduplicationUtil {
    /**
     * 自定義函數(shù)去重(采用 Predicate函數(shù)式判斷,采用 Function獲取比較key)
     * 內(nèi)部維護(hù)一個(gè) ConcurrentHashMap,并采用 putIfAbsent特性實(shí)現(xiàn)
     *
     * @param keyExtractor
     * @param <T>
     * @return
     */
    public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
        Map<Object,Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }

    /**
     * 只獲取重復(fù)的數(shù)據(jù)
     *
     * @param keyExtractor
     * @param <T>
     * @return
     */
    public static <T> Predicate<T> distinctNotByKey(Function<? super T, ?> keyExtractor) {
        Map<Object,Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) != null;
    }
}

導(dǎo)入這個(gè)工具類(lèi)后怎么使用呢?我們接著往下看。

方法一根據(jù)指定字段去重

package com.jzmy.specialist.entity.util;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author mengzhichao
 * @create 2022-12-02-10:46
 */
public class Test {
    public static class Student{

        private String id;

        private String name;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public static void main(String[] args) {

        List<Student> list =new ArrayList<>();

        Student student =new Student();
        student.setId("1");
        student.setName("張三");
        list.add(student);

        Student student2 =new Student();
        student2.setId("1");
        student2.setName("張三");
        list.add(student2);

        Student student3 =new Student();
        student3.setId("1");
        student3.setName("李四");
        list.add(student3);

        Student student4 =new Student();
        student4.setId("2");
        student4.setName("王五");
        list.add(student4);

        System.out.println("未去重前l(fā)ist有幾條數(shù)據(jù):"+list.size());


        List<Student> rstList = list.stream().filter(DeduplicationUtil.distinctByKey(Student::getId)).collect(Collectors.toList());

        System.out.println("未去重前l(fā)ist有幾條數(shù)據(jù):"+rstList.size());
    }
}

List rstList = list.stream().filter(DeduplicationUtil.distinctByKey(Student::getId)).collect(Collectors.toList());

  • 這段代碼的意思是通過(guò)stream的filter方法進(jìn)行過(guò)濾,過(guò)濾Id不相同的數(shù)據(jù)并通過(guò)collect方法收集為一個(gè)新的集合。

代碼運(yùn)行結(jié)果

lambda根據(jù)某個(gè)字段去重,雜文,java,jvm,開(kāi)發(fā)語(yǔ)言

方法二獲取重復(fù)數(shù)據(jù)

package com.jzmy.specialist.entity.util;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author mengzhichao
 * @create 2022-12-02-10:46
 */
public class Test {
    public static class Student{

        private String id;

        private String name;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public static void main(String[] args) {

        List<Student> list =new ArrayList<>();

        Student student =new Student();
        student.setId("1");
        student.setName("張三");
        list.add(student);

        Student student2 =new Student();
        student2.setId("1");
        student2.setName("張三");
        list.add(student2);

        Student student3 =new Student();
        student3.setId("1");
        student3.setName("李四");
        list.add(student3);

        Student student4 =new Student();
        student4.setId("2");
        student4.setName("王五");
        list.add(student4);

        System.out.println("集合中的全部數(shù)據(jù)");
        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i).getId());
            System.out.println(list.get(i).getName());
        }

        List<Student> rstList = list.stream().filter(DeduplicationUtil.distinctNotByKey(Student::getId)).collect(Collectors.toList());

        System.out.println("集合中的重復(fù)數(shù)據(jù)");
        for (int i=0;i<rstList.size();i++){
            System.out.println(rstList.get(i).getId());
            System.out.println(rstList.get(i).getName());
        }
    }
}

List rstList = list.stream().filter(DeduplicationUtil.distinctNotByKey(Student::getId)).collect(Collectors.toList());

  • 這個(gè)和上面那個(gè)方法原理一樣的只是換了一個(gè)調(diào)用方法而已。

代碼運(yùn)行結(jié)果

lambda根據(jù)某個(gè)字段去重,雜文,java,jvm,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-602321.html

到了這里,關(guān)于Java通過(guò)Lambda表達(dá)式根據(jù)指定字段去除重復(fù)數(shù)據(jù)(集合去重)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Lambda表達(dá)式(JAVA)

    Lambda表達(dá)式(JAVA)

    注:如果沒(méi)有學(xué)過(guò) 匿名內(nèi)部類(lèi) 和 接口 不推薦往下看。 (parameters) - expression 或 (parameters) -{ statements; } parameters:表示參數(shù)列表; -:可理解為“被用于”的意思; expression:表示一條語(yǔ)句; statements:表示多條語(yǔ)句。 Lambda可以理解為:Lambda就是匿名內(nèi)部類(lèi)的簡(jiǎn)化。 lambda表達(dá)式

    2024年02月08日
    瀏覽(28)
  • 【Python小技巧】通過(guò)實(shí)例說(shuō)明推導(dǎo)式,條件表達(dá)式和Lambda函數(shù)

    按照國(guó)際慣例,首先聲明:本文只是我自己學(xué)習(xí)的理解,雖然參考了他人的寶貴見(jiàn)解及成果,但是內(nèi)容可能存在不準(zhǔn)確的地方。如果發(fā)現(xiàn)文中錯(cuò)誤,希望批評(píng)指正,共同進(jìn)步。 本文總結(jié)在Python編程中會(huì)使用到的三個(gè)(高階)小技巧:推導(dǎo)式,條件表達(dá)式和Lambda函數(shù),并通過(guò)實(shí)

    2024年03月27日
    瀏覽(23)
  • 【JAVA】包裝類(lèi)、正則表達(dá)式、Arrays類(lèi)、Lambda表達(dá)式

    包裝類(lèi)是8種基本數(shù)據(jù)類(lèi)型對(duì)應(yīng)的引用類(lèi)型 作用:后期的集合和泛型不支持基本類(lèi)型,只能使用包裝類(lèi) 基本數(shù)據(jù)類(lèi)型和其對(duì)應(yīng)的引用數(shù)據(jù)類(lèi)型的變量可以互相賦值 基本數(shù)據(jù)類(lèi)型 引用數(shù)據(jù)類(lèi)型 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean 包裝類(lèi)

    2024年02月13日
    瀏覽(36)
  • java lambda表達(dá)式詳解

    java lambda表達(dá)式詳解

    我們知道,在Java中,接口是不能實(shí)例化的,但是接口對(duì)象可以指向它的實(shí)現(xiàn)類(lèi)對(duì)象。如果接口連實(shí)現(xiàn)對(duì)象都沒(méi)有呢?那還可以使用匿名類(lèi)的方式,如下: 復(fù)制 但是,使用匿名內(nèi)部的方式,代碼量其實(shí)并不是非常簡(jiǎn)潔,而為了使代碼更加的簡(jiǎn)潔,Java引進(jìn)了 Lambda 表達(dá)式的寫(xiě)法,

    2024年02月03日
    瀏覽(34)
  • Java中的lambda表達(dá)式

    Java中的lambda表達(dá)式

    目錄 一、背景 二、lambada表達(dá)式的基本使用 三、變量捕獲 四、lambda在集合中的使用(map和set) 五、優(yōu)缺點(diǎn) 一、背景 (1)、lambda表達(dá)式的定義: (2)、lambda表達(dá)式的語(yǔ)法: (3)、函數(shù)式接口 二、lambada表達(dá)式的基本使用 (1)沒(méi)有使用lambda表達(dá)式,簡(jiǎn)單調(diào)用函數(shù)式接口展

    2024年02月08日
    瀏覽(23)
  • Java學(xué)習(xí)——lambda表達(dá)式

    Java學(xué)習(xí)——lambda表達(dá)式

    什么是Lambda表達(dá)式? 可以將Lambda表達(dá)式理解為一個(gè)匿名函數(shù); Lambda表達(dá)式允許將一個(gè)函數(shù)作為另外一個(gè)函數(shù)的參數(shù); 我們可以把 Lambda 表達(dá)式理解為是一段可以傳遞的代碼(將代碼作為實(shí)參),也可以理解為函數(shù)式編程, 將一個(gè)函數(shù)作為參數(shù)進(jìn)行傳遞 。 為什么要引入Lambda表

    2024年02月04日
    瀏覽(39)
  • Java新特性:Lambda表達(dá)式

    Java新特性:Lambda表達(dá)式

    Java新特性:Lambda表達(dá)式 Lambda 表達(dá)式(Lambda expression),也可稱(chēng)為閉包(Closure),是 Java(SE)8 中一個(gè)重要的新特性。Lambda 表達(dá)式允許我們通過(guò)表達(dá)式來(lái)代替功能接口。Lambda 表達(dá)式就和方法一樣,它提供了一個(gè)正常的參數(shù)列表和一個(gè)使用這些參數(shù)的主體(body,可以是一個(gè)表

    2024年02月13日
    瀏覽(33)
  • Java 8 Lambda表達(dá)式詳解

    在Java 8中,引入了一種全新的函數(shù)編程概念,即Lambda表達(dá)式。這是一個(gè)重要的進(jìn)步,它讓Java的功能得以大幅擴(kuò)展,同時(shí)還讓代碼變得更加簡(jiǎn)潔明了。接下來(lái),我將詳細(xì)介紹Lambda表達(dá)式的相關(guān)知識(shí),包括其基本語(yǔ)法、使用場(chǎng)景和特性。 Lambda表達(dá)式基本的語(yǔ)法可以分為三個(gè)部分

    2024年02月08日
    瀏覽(48)
  • 淺談 Java 中的 Lambda 表達(dá)式

    淺談 Java 中的 Lambda 表達(dá)式

    更好的閱讀體驗(yàn) huge{color{red}{更好的閱讀體驗(yàn)}} 更好的閱讀體驗(yàn) Lambda 表達(dá)式是一種匿名函數(shù),它可以作為參數(shù)傳遞給方法或存儲(chǔ)在變量中。在 Java8 中,它和函數(shù)式接口一起,共同構(gòu)建了函數(shù)式編程的框架。 函數(shù)式編程是一種編程范式,也是一種思想。 它將計(jì)算視為函數(shù)求

    2024年02月11日
    瀏覽(38)
  • 【Java基礎(chǔ)】Java Lambda表達(dá)式詳解

    【Java基礎(chǔ)】Java Lambda表達(dá)式詳解

    Lambda 表達(dá)式,即函數(shù)式編程是 JDK8 的一個(gè)新特性,也被稱(chēng)為閉包,Lambda表達(dá)式允許把函數(shù)作為一個(gè)方法的參數(shù),即行為參數(shù)化,函數(shù)作為參數(shù)傳遞進(jìn)方法中。 Lambda表達(dá)式可以取代大部分的匿名內(nèi)部類(lèi),寫(xiě)出更優(yōu)雅的 Java 代碼,尤其在集合的遍歷和其他集合操作中,可以極大

    2024年02月04日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包