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

java 8 stream toMap key的重復問題

這篇具有很好參考價值的文章主要介紹了java 8 stream toMap key的重復問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

問題描述

工作中遇到需要將某個List里面的實體類的兩個屬性對應起來,比如根據(jù)姓名找到年齡,就是將List里面的entity屬性解析之后放到Map里。
實體類:

public class Person {
        private String name;
        private Integer age;
        ...省略getter、setter
    }

邏輯:

		Person person = new Person("張三",20);
        Person person1 = new Person("李四",20);
        Person person2 = new Person("張三",20);

        List<Person> list = new ArrayList<Person>(){{
            add(person);
            add(person1);
            add(person2);
        }};

        Map<String, Integer> map = new HashMap<>();
        //常規(guī)寫法
        for (Person p : list) {
            map.put(p.getName(), p.getAge());
        }
        System.out.println(map);
        //stream 流寫法
        Map<String, Integer> collect = list.stream().collect(Collectors.toMap(Person::getName, Person::getAge));
        System.out.println(collect);

單純常規(guī)寫法肯定沒什么問題,就是后面的key會被覆蓋,但是stream流不行,會報錯。

Exception in thread "main" java.lang.IllegalStateException: Duplicate key 20

原因分析:

Collectors.toMap這個方法其實是有三個參數(shù)的,第一個是key,第二個是value,第三個是發(fā)生沖突的合并規(guī)則。
默認采用的就是沖突之后拋出異常的處理。

public static <T, K, U>
    Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper) {
        return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
    }

解決方案:

只需要加上第三個參數(shù)即可

public static <T, K, U>
    Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper,
                                    BinaryOperator<U> mergeFunction) {
        return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
    }

新代碼只需要更改第三個參數(shù)即可,會跟常規(guī)寫法一個效果

        Map<String, Integer> collect = list.stream().collect(Collectors.toMap(Person::getName, Person::getAge, (oldValue, newValue) -> newValue));

當然還可以采用Collectors.groupingBy(keyFunction)的寫法,但是返回值會是Map<key, List<value>>的形式。這就是新的業(yè)務場景了。
附上代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-816262.html

Map<String, List<Person>> collect1 = list.stream().collect(Collectors.groupingBy(Person::getName));

到了這里,關(guān)于java 8 stream toMap key的重復問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • java8 Stream流Collectors.toMap當value為null時報空指針異常(NPE)

    java8 Stream流Collectors.toMap當value為null時報空指針異常(NPE)

    一、問題 在項目測試過程中發(fā)現(xiàn)當使用下面這種方法后報空指針異常(NPE): 按理說 HashMap 的 key?和 value 都是可以為 null?的,不應該報 NPE 啊,經(jīng)過定位分析發(fā)現(xiàn) Map 中有個鍵值對的 value 為 null?值,在調(diào)用 Collectors.toMap 時報了 NullPointerException 。 二、分析 Collectors.toMap?的

    2024年02月15日
    瀏覽(18)
  • 【JAVA】生產(chǎn)環(huán)境kafka重復消費問題記錄

    業(yè)務系統(tǒng)每周都有定時任務在跑,由于是大任務因此采用分而治之思想將其拆分為多個分片小任務采用 kafka異步隊列消費 的形式來減少服務器壓力,每個小任務都會調(diào)用后臺的c++算法,調(diào)用完成之后便會回寫數(shù)據(jù)庫的成功次數(shù)。今天觀測到定時任務的分片小任務存在被重復消

    2024年04月12日
    瀏覽(19)
  • Java開發(fā)工作問題整理與記錄

    ? ? 首先 類加@Component注解,使當前類成為bean ? ? 然后 定義statis類成員 ? ? 然后 創(chuàng)建 init()方法,用@PostConstruct注解修飾 ? ? 最后init()方法中,把需要加載的類復制給static類 導入commons-lang3的jar包 dependency groupIdorg.apache.commons/groupId artifactIdcommons-lang3/artifactId version3.8.1/version

    2024年02月11日
    瀏覽(41)
  • 利用java語言中的stream流操作判斷一個數(shù)組中是否有重復元素

    判斷數(shù)組中是否有重復元素可以說是每一個編程語言初學者都會遇到的題目,常見的各種搜索算法本文不做贅述了,我們這次介紹的是利用java語言中特有的stream流操作來判斷通用類型數(shù)組是否包含重復元素。 首先我們聲明一個泛型方法: 表明該方法適用于所有類型的數(shù)組。

    2024年02月12日
    瀏覽(51)
  • Java8使用stream流給List<Map<String,Object>>分組(多字段key)

    Java8使用 stream流 給ListMapString,Object根據(jù)字段key 分組 一、項目場景: 從已得到的List集合中,根據(jù)某一元素(這里指map的key)進行分組,篩選出需要的數(shù)據(jù)。 如果是SQL的話則使用 group by 直接實現(xiàn),代碼的方式則如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代碼實現(xiàn) 1、首

    2024年02月02日
    瀏覽(87)
  • 記錄一下在工作中使用 LayUI bug的問題

    前言: LayUI是一個很老的框架了,經(jīng)常會碰到一些 bug。不過由于他的輕量級,仍然有一些項目在使用。之前在公司解決的這些 bug,現(xiàn)在有時間發(fā)出來,可能會對大家產(chǎn)生一些意義。 layui中 slect form表單元素 不美化顯現(xiàn)的問題 layui中美化的表單元素 在渲染完成要添加 form.ren

    2024年02月11日
    瀏覽(16)
  • 【工作記錄】記一次執(zhí)行npm run dev報錯的問題

    記錄一個npm run dev 報錯的問題。 今天在家里電腦跑npm run dev的時候報錯,報錯內(nèi)容如下: 第一時間去找了度娘,也確實解決了,但不得不說網(wǎng)上還是有一些錯誤的答案的。 這個問題是由于node版本過高導致的,所以有一種方案便是降低node版本,正常來講17一下就是ok的。 另外一

    2024年02月12日
    瀏覽(30)
  • java8新特性之toMap的用法——全網(wǎng)獨一無二的通俗易懂的講解

    java8新特性之toMap的用法——全網(wǎng)獨一無二的通俗易懂的講解

    對于java8的新特性toMap方法,相信有很多人都在工作中用過,接下來就通俗易懂的講解一下toMap吧 先來看看官網(wǎng)對于toMap方法的解釋 toMap有個三個重載的方法,每一個重載方法的詳解分別如下 (1)方法1:兩個參數(shù) public static T, K, U Collector T, ?, MapK,U toMap(Function? super T, ? extends

    2024年02月08日
    瀏覽(25)
  • 【工作記錄】springboot集成spring-data-elasticsearch訪問es及問題解決

    【工作記錄】springboot集成spring-data-elasticsearch訪問es及問題解決

    ? 前文我們介紹了通過可視化爬蟲爬取新聞到Mysql庫、基于docker-compose的elk集群部署及抽取mysql數(shù)據(jù)到es的過程,本文我們介紹通過集成springboot和spring-data-elasticsearch客戶端完成連接es并查詢數(shù)據(jù)的開發(fā)過程以及遇到的問題和解決方案,希望對大家能有所幫助,對文中內(nèi)容有任何

    2023年04月10日
    瀏覽(25)
  • 如何解決字典打開和字典的讀取,重復問題的避免【Java語言】

    在Java語言中,常用的解決字典打開和讀取的方式是使用Map,例如HashMap或TreeMap。這些數(shù)據(jù)結(jié)構(gòu)可以存儲鍵值對,其中鍵是唯一的。因此,通過使用Map,可以 避免重復的問題 。 編寫代碼時需要著重考慮以下幾個方面: 定義Map :需要定義一個Map對象來存儲鍵值對,以便后續(xù)的

    2024年02月11日
    瀏覽(45)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包