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

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

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

嘚吧嘚

Java8流的新類java.util.stream.Collectors實(shí)現(xiàn)了java.util.stream.Collector接口,同時又提供了大量的方法對流(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é)果如下

在這里插入圖片描述

但是這種方式必須要每個鍵值對都一樣,才會被判定成重復(fù)的,否則不會被判為重復(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的值不一樣,所以沒有被被判定為重復(fù)。

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

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

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”,這個函數(shù)是干什么的呢?咱們繼續(xù)。

Collectors.collectingAndThen()

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

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

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]這個集合傳遞給item -> item * 2這個lambda表達(dá)式,計(jì)算得出結(jié)果為[2,4,6,8]

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

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

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

相關(guān)文章

  • 優(yōu)惠券優(yōu)惠的思路以及實(shí)踐

    優(yōu)惠券優(yōu)惠的思路以及實(shí)踐

    本文主要介紹了優(yōu)惠券優(yōu)惠的思路以及實(shí)踐。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • java實(shí)現(xiàn)簡易計(jì)算器功能

    java實(shí)現(xiàn)簡易計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • maven打包成第三方j(luò)ar包且把pom依賴包打入進(jìn)來的方法

    maven打包成第三方j(luò)ar包且把pom依賴包打入進(jìn)來的方法

    這篇文章主要介紹了maven打包成第三方j(luò)ar包且把pom依賴包打入進(jìn)來的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 使用Java實(shí)現(xiàn)PDF文件安全檢測功能

    使用Java實(shí)現(xiàn)PDF文件安全檢測功能

    在日常開發(fā)中,我們經(jīng)常需要處理用戶上傳的PDF文件,然而,PDF文件可能包含惡意腳本或危險(xiǎn)內(nèi)容,這些內(nèi)容可能對系統(tǒng)安全構(gòu)成威脅,本文將介紹如何使用Java實(shí)現(xiàn)一個PDF安全檢測工具類來防止惡意內(nèi)容注入,需要的朋友可以參考下
    2025-08-08
  • Java超詳細(xì)講解三大特性之一的封裝

    Java超詳細(xì)講解三大特性之一的封裝

    封裝是一個非常廣泛的概念,小到一個屬性的封裝,大到一個框架或者一個項(xiàng)目的封裝,下面這篇文章主要給大家介紹了關(guān)于java中封裝的那點(diǎn)事,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • RabbitMQ TTL機(jī)制實(shí)踐建議

    RabbitMQ TTL機(jī)制實(shí)踐建議

    RabbitMQ提供的TTL(Time to Live,過期時間)特性恰好滿足這一需求,它支持對單個消息和整個隊(duì)列分別設(shè)置過期時間,靈活適配不同業(yè)務(wù)場景,本文給大家介紹RabbitMQ TTL機(jī)制實(shí)踐建議,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • Java快速實(shí)現(xiàn)圖書管理基本功能

    Java快速實(shí)現(xiàn)圖書管理基本功能

    隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對圖書館的日常工作進(jìn)行管理勢在必行,本篇文章涵蓋一個圖書管理系統(tǒng)的基本功能實(shí)現(xiàn)代碼,大家可以查缺補(bǔ)漏,提升水平
    2022-05-05
  • 詳解Java關(guān)于JDK中時間日期的API

    詳解Java關(guān)于JDK中時間日期的API

    這篇文章主要介紹了詳解Java關(guān)于JDK中時間日期的API,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Maven+SSM框架實(shí)現(xiàn)簡單的增刪改查

    Maven+SSM框架實(shí)現(xiàn)簡單的增刪改查

    這篇文章主要介紹了Maven+SSM框架實(shí)現(xiàn)簡單的增刪改查,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java在運(yùn)行時識別類型信息的方法詳解

    Java在運(yùn)行時識別類型信息的方法詳解

    這篇文章主要給大家介紹了關(guān)于Java在運(yùn)行時識別類型信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面來一起看看吧
    2019-01-01

最新評論

边坝县| 固阳县| 金川县| 垦利县| 台湾省| 梁山县| 麦盖提县| 界首市| 正定县| 双桥区| 荣成市| 吴江市| 福泉市| 胶南市| 临安市| 保靖县| 高密市| 修武县| 榆中县| 丘北县| 天等县| 红原县| 德令哈市| 电白县| 当雄县| 三江| 乌鲁木齐县| 龙南县| 日喀则市| 恩施市| 珠海市| 安丘市| 启东市| 颍上县| 临漳县| 栾城县| 武威市| 社旗县| 荃湾区| 建宁县| 梁平县|