亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java List按照某字段去重的使用示例

 更新時(shí)間:2023年12月28日 15:11:00   作者:布丁吖  
在Java開發(fā)中,我們經(jīng)常會(huì)面臨對(duì)List中對(duì)象屬性去重的需求,本文主要介紹了Java List按照某字段去重的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下

嘚吧嘚

Java8流的新類java.util.stream.Collectors實(shí)現(xiàn)了java.util.stream.Collector接口,同時(shí)又提供了大量的方法對(duì)流(stream)的元素執(zhí)行各種統(tǒng)計(jì)操作。

distinct

示例一

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);

執(zhí)行結(jié)果如下

在這里插入圖片描述

但是這種方式必須要每個(gè)鍵值對(duì)都一樣,才會(huì)被判定成重復(fù)的,否則不會(huì)被判為重復(fù),如下。

示例二

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19 + i);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19 + i);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);

執(zhí)行結(jié)果如下

在這里插入圖片描述

雖然name的值一樣,但是age的值不一樣,所以沒(méi)有被被判定為重復(fù)。

所以如果要按照某字段去重,請(qǐng)采用如下方式。

根據(jù)某個(gè)字段去重

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19 + i);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19 + i);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> String.valueOf(p.get("name"))))), ArrayList::new));
collect.forEach(System.out::println);

執(zhí)行結(jié)果如下

在這里插入圖片描述

代碼中用到了“Collectors.collectingAndThen”,這個(gè)函數(shù)是干什么的呢?咱們繼續(xù)。

Collectors.collectingAndThen()

從函數(shù)名字就可以看出,這個(gè)函數(shù)分為兩個(gè)部分,一個(gè)是collecting,另一個(gè)是then。

Collectors.collectingAndThen()函數(shù)很像map and reduce,它可接受兩個(gè)參數(shù),第一個(gè)參數(shù)用于reduce(collecting)操作,而第二參數(shù)用于map(then)操作。
也就是,先把流中的所有元素傳遞給第一個(gè)參數(shù),然后把生成的集合傳遞給第二個(gè)參數(shù)來(lái)處理。

List<Integer> list = Arrays.asList(1, 2, 3, 4);
Double result = list.stream().collect(Collectors.collectingAndThen(Collectors.averagingLong(item -> item * 2), res -> res * 3));
System.out.println("result = " + result);

執(zhí)行結(jié)果如下

在這里插入圖片描述

邏輯如下

把[1,2,3,4]這個(gè)集合傳遞給item -> item * 2這個(gè)lambda表達(dá)式,計(jì)算得出結(jié)果為[2,4,6,8]

然后再把[2,4,6,8]傳遞給Collectors.averagingLong表達(dá)式,計(jì)算得出5.0

然后傳遞給res -> res * 3這個(gè)lambda表達(dá)式,計(jì)算得到結(jié)果為15.0

到此這篇關(guān)于Java List按照某字段去重的使用示例的文章就介紹到這了,更多相關(guān)Java List字段去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java實(shí)現(xiàn)文件壓縮為zip和解壓zip壓縮包

    Java實(shí)現(xiàn)文件壓縮為zip和解壓zip壓縮包

    這篇文章主要為大家介紹了Java如何實(shí)現(xiàn)將文件壓縮為zip以及解壓zip壓縮包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-06-06
  • SpringBoot限制接口訪問(wèn)頻率避坑

    SpringBoot限制接口訪問(wèn)頻率避坑

    這篇文章主要為大家介紹了SpringBoot限制接口訪問(wèn)頻率避坑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java?Collection接口中的常用方法總結(jié)

    Java?Collection接口中的常用方法總結(jié)

    這篇文章將大概用代碼案例簡(jiǎn)單總結(jié)一下?Collection?接口中的一些方法,我們會(huì)以他的實(shí)現(xiàn)類?Arraylist?為例創(chuàng)建對(duì)象??煲黄饋?lái)看看吧
    2022-12-12
  • Java多線程之volatile關(guān)鍵字及內(nèi)存屏障實(shí)例解析

    Java多線程之volatile關(guān)鍵字及內(nèi)存屏障實(shí)例解析

    volatile是JVM提供的一種最輕量級(jí)的同步機(jī)制,因?yàn)镴ava內(nèi)存模型為volatile定義特殊的訪問(wèn)規(guī)則,使其可以實(shí)現(xiàn)Java內(nèi)存模型中的兩大特性:可見性和有序性。這篇文章主要介紹了Java多線程之volatile關(guān)鍵字及內(nèi)存屏障,需要的朋友可以參考下
    2019-05-05
  • 基于slf4j日志MDC輸出格式的問(wèn)題

    基于slf4j日志MDC輸出格式的問(wèn)題

    這篇文章主要介紹了基于slf4j日志MDC輸出格式的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解

    Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解

    這篇文章主要介紹了Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring入門實(shí)戰(zhàn)之Profile詳解

    Spring入門實(shí)戰(zhàn)之Profile詳解

    什么是spring profile?簡(jiǎn)單講profile就是一組配置,不同profile提供不同組合的配置,程序運(yùn)行時(shí)可以選擇使用哪些profile來(lái)適應(yīng)環(huán)境。下面這篇文章主要介紹了Spring中Profile實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考借鑒。
    2017-02-02
  • java 字符串內(nèi)存分配的分析與總結(jié)(推薦)

    java 字符串內(nèi)存分配的分析與總結(jié)(推薦)

    下面小編就為大家?guī)?lái)一篇java 字符串內(nèi)存分配的分析與總結(jié)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • SpringCloud Zuul自定義filter代碼實(shí)例

    SpringCloud Zuul自定義filter代碼實(shí)例

    這篇文章主要介紹了SpringCloud Zuul自定義filter代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 使用1招搞定maven打包空間不足的問(wèn)題

    使用1招搞定maven打包空間不足的問(wèn)題

    這篇文章主要介紹了使用1招搞定maven打包空間不足的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09

最新評(píng)論