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

Java Stream流 List< T >轉(zhuǎn)換Map方法匯總合集(大概是最全吧)

這篇具有很好參考價(jià)值的文章主要介紹了Java Stream流 List< T >轉(zhuǎn)換Map方法匯總合集(大概是最全吧)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Java Stream流 List< T >轉(zhuǎn)換Map方法匯總合集(大概是最全吧)

本文主要介紹 Java 中利用 Stream 流將 List< T > 類型數(shù)據(jù)轉(zhuǎn)換成 Map 類型的幾種方法整合匯總,其中包含了toMap()、groupingBy()、partitioningBy()等方法的使用,建議收藏方便查閱,如果有幫助到您,不要吝嗇點(diǎn)贊、收藏!

tips:本文沒有推薦使用三方類庫提供的 List 轉(zhuǎn) Map 工具類方法,因?yàn)樵诓┲鞴疽肴揭蕾囆枰谠u審時(shí)說出引用原因,哈哈哈(太麻煩),當(dāng)然有很多好用三方工具類可以直接完成 List 轉(zhuǎn) Map 的操作,如有需要,后續(xù)博主會單獨(dú)寫一篇三方類庫的 List 轉(zhuǎn) Map 工具類方法博文提供給大家。

??????您的點(diǎn)贊、收藏、評論是博主輸出優(yōu)質(zhì)文章的的動力?。?!??????

以下示例會覆蓋工作中絕大部分的使用場景,如有沒有覆蓋到的場景,后續(xù)會基于本文持續(xù)更新??!所以大家一定要收藏!點(diǎn)贊!歡迎在評論區(qū)與博主溝通交流??!???? ???? ????

List< String > -> Map< String,List< String>>

示例一

通過Stream流完成轉(zhuǎn)換:

 	@Test
    public void testList1() {
        List<String> list = Arrays.asList("s1:01", "s2:02", "s3:03", "s4:04");
        Pattern DELIMITER = Pattern.compile(":");
        Map<String, List<String>> map = list.stream().map(DELIMITER::split)
                .collect(Collectors.groupingBy(a -> a[0],
                        Collectors.mapping(a -> a[1], Collectors.toList())));
        System.out.println(JSONObject.toJSONString(map));
    }

運(yùn)行結(jié)果:
stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

示例二

通過forEach循環(huán)轉(zhuǎn)換:

    @Test
    public void testList1() {
        List<String> list = Arrays.asList("s1:01", "s2:02", "s3:03", "s4:04");
        Map<String, Set<String>> map = new HashMap<>();
        list.forEach(location -> {
            String[] strArr = location.split(":");
            map.compute(strArr[0], (country, codes) -> {
                codes = codes == null ? new HashSet<>() : codes;
                codes.add(strArr[1]);
                return codes;
            });
        });
        System.out.println(JSONObject.toJSONString(map));
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

List< T > -> Map< T, T >

List< Integer> -> Map< Integer,Integer>

代碼示例(本示例是存在重復(fù)key,并且會以首個(gè)出現(xiàn)的 key 去覆蓋后面出現(xiàn)的沖突 key):

 	@Test
    public void testList2() {
        List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 4, 5, 6, 7, 8);
        Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(k -> k, v -> v, (k1, k2) -> k1));
        System.out.println("collect:" + collect);
    }

toMap()無重復(fù)key

示例一

List泛型為 Student 對象,示例需要將name屬性作為 key,age 屬性作為value;

    @Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
        Map<String, Integer> collect = list.stream().collect(Collectors.toMap(Student::getName, Student::getAge));
        System.out.println(JSONObject.toJSONString(collect));
    }
示例二

List泛型為 Student 對象,示例需要將name屬性作為 key, Student 對象作為value;

@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
        Map<String, Student> collect = list.stream().collect(Collectors.toMap(Student::getName, student -> student));
        System.out.println(JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

toMap()有重復(fù)key

當(dāng)存在重復(fù) key 時(shí),編譯器會報(bào)錯(cuò):java.lang.IllegalStateException: Duplicate key xxxx;
stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

出現(xiàn)這種情況就需要在 toMap() 方法中指定 key 來避免沖突;

示例一

解決辦法:使用第一個(gè)key 覆蓋第二個(gè)key;

    @Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 2),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
        Map<String, Student> collect = list.stream().collect(Collectors.toMap(Student::getName, student -> student, (key1, key2) -> key1));
        System.out.println(JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果(保留了 “num”:11 的對象):

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

示例二

解決辦法:使用第二個(gè)key 覆蓋第一個(gè)key;

	@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 2),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
        Map<String, Student> collect = list.stream().collect(Collectors.toMap(Student::getName, student -> student, (key1, key2) -> key2));
        System.out.println(JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果(保留了 “num”:2 的對象):

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

toMap()空指針異常

當(dāng) value 為空時(shí),使用 toMap() 方法進(jìn)行轉(zhuǎn)換,編譯器會拋出 java.lang.NullPointerException;

	@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29),
                new Student("小田", null, DateUtil.parse("2007-02-21 22:18:56"), null));
        Map<String, Integer> collect = list.stream().collect(Collectors.toMap(Student::getName, Student::getAge));
        System.out.println(JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

解決辦法一

轉(zhuǎn)換時(shí)增加判斷,如果是null,則設(shè)置默認(rèn)值;

	@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29),
                new Student("小田", null, DateUtil.parse("2007-02-21 22:18:56"), null));
        Map<String, Integer> collect = list.stream().collect(Collectors.toMap(Student::getName, s -> s.getAge() == null ? -1 : s.getAge()));
        System.out.println(JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

解決辦法二

使用 Optional< T > 對值進(jìn)行包裝(和方式一大同小異,就是換了個(gè)寫法):

	@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29),
                new Student("小田", null, DateUtil.parse("2007-02-21 22:18:56"), null));
        Map<String, Integer> collect = list.stream().collect(Collectors.toMap(Student::getName,  s -> Optional.ofNullable(s.getAge()).orElse(-1)));
        System.out.println("Optional:"+JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

解決辦法三

使用collect(Supplier< R > supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) 來構(gòu)建,可允許null值的出現(xiàn):

	@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29),
                new Student(null, 12, DateUtil.parse("2007-02-21 22:18:56"), null));
        HashMap<Integer, String> collect = list.stream().collect(HashMap::new, (obj, v) -> obj.put(v.getAge(), v.getName()), HashMap::putAll);
        System.out.println("collect:" + collect);
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

List< T > -> Map< T, List< T > >

groupingBy()

直接根據(jù)一個(gè)字段或者屬性分組也可以直接用 groupingBy() 方法:

	@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 2),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
        Map<String, List<Student>> collect = list.stream().collect(Collectors.groupingBy(Student::getName));
        System.out.println(JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda

partitioningBy()

partitioningBy() 可以理解為特殊的 groupingBy() ,key 值為 Boolean類型:

	@Test
    public void testList2() {
        List<Student> list = Lists.newArrayList(
                new Student("小張", 17, DateUtil.parse("2006-10-03 15:18:56"), 11),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 5),
                new Student("小李", 15, DateUtil.parse("2008-03-19 02:18:56"), 2),
                new Student("小王", 16, DateUtil.parse("2007-02-21 22:18:56"), 29));
        Map<Boolean, List<Student>> collect = list.stream().collect(Collectors.partitioningBy(s -> s.getNum() >= 5));
        System.out.println(JSONObject.toJSONString(collect));
    }

運(yùn)行結(jié)果:

stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda文章來源地址http://www.zghlxwxcb.cn/news/detail-756244.html


stream流轉(zhuǎn)換為map,Java,java,list,map,stream,lambda感 謝 各 位 大 佬 的 閱 讀,隨 手 點(diǎn) 贊,日 薪 過 萬~! ??!

到了這里,關(guān)于Java Stream流 List< T >轉(zhuǎn)換Map方法匯總合集(大概是最全吧)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java Stream:List分組成Map或LinkedHashMap

    在Java中,使用Stream API可以輕松地對集合進(jìn)行操作,包括將List轉(zhuǎn)換為Map或LinkedHashMap。本篇博客將演示如何利用Java Stream實(shí)現(xiàn)這兩種轉(zhuǎn)換,同時(shí)假設(shè)List中的元素是User對象。 List轉(zhuǎn)Map有兩種Map格式,分別是 MapString, User 和 MapString, List ,下面我將分別展示: 轉(zhuǎn)換成MapString, User我們

    2024年02月03日
    瀏覽(21)
  • Java中用Stream流對List對象集合轉(zhuǎn)Map時(shí)key值重復(fù)的操作

    看完你還不懂,你直接噴·· 定義: 1.List是一個(gè)裝Dto對象的集合 2.Dto里面有ID屬性,name屬性等等 3.Dto里面的ID會重復(fù) ?現(xiàn)在要把List轉(zhuǎn)成以ID為key值的map,明顯key不能重復(fù)啊,所以應(yīng)該怎么操作呢? (需要你有java8Stream流的基本概念,map的基本概念) ? 操作1:重復(fù)key,選擇保留

    2024年01月18日
    瀏覽(91)
  • Java Stream 處理分組后取每組最大&Stream流之list轉(zhuǎn)map、分組取每組第一條&Java 8 Collectors:reducing 示例(List分組取最值)

    Java Stream 處理分組后取每組最大&Stream流之list轉(zhuǎn)map、分組取每組第一條&Java 8 Collectors:reducing 示例(List分組取最值)

    有一個(gè)需求功能:先按照某一字段分組,再按照另外字段獲取最大的那個(gè) 先根據(jù)appId分組,然后根據(jù)versionSort取最大. JDK1.8推出的stream流能極大的簡化對集合的操作,讓代碼更美觀,老規(guī)矩,直接上代碼。 取list中對象的某個(gè)屬性作為唯一key,對象作為value形成一個(gè)map集合,能

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

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

    2024年02月02日
    瀏覽(87)
  • 【Java】集合List轉(zhuǎn)換為數(shù)組【toArray() /stream()流】實(shí)現(xiàn)

    在Java中,集合(List 接口的實(shí)現(xiàn)類)提供了一個(gè)名為 toArray 的方法,用于將集合中的元素轉(zhuǎn)換成數(shù)組。該方法有兩個(gè)主要的重載形式,分別用于不同的情況。 這個(gè)方法將集合中的元素復(fù)制到一個(gè)指定類型的數(shù)組中,并返回該數(shù)組。 如果指定的數(shù)組大小足夠容納集合中的所有

    2024年02月03日
    瀏覽(19)
  • Java將一個(gè)list<T>指定key轉(zhuǎn)換成Map<list>

    經(jīng)常有這種,一個(gè)數(shù)據(jù)庫里有多個(gè)字段,但是數(shù)據(jù)庫只能返回一個(gè)list,你group分組了也沒用。 然后你得到的是一個(gè)list,你想根據(jù)type分組,大概是這樣 [ {\\\"name\\\":\\\"牛奶\\\",\\\"desc\\\":\\\"吃了有力氣\\\",\\\"type\\\":\\\"食物\\\"}, {\\\"name\\\":\\\"貓耳朵\\\",\\\"desc\\\":\\\"富含豐富油脂\\\",\\\"type\\\":\\\"食物\\\"}, {\\\"name\\\":\\\"電腦\\\",\\\"desc\\\":\\\"可以提升

    2024年01月24日
    瀏覽(16)
  • 使用java8 新特性stream流對List<Map<String, Object>>集合進(jìn)行遍歷、過濾、查詢、去重、排序、分組

    對于一個(gè)ListMapString, Object類型的數(shù)據(jù),可以使用Java 8的新特性stream流來進(jìn)行遍歷、過濾、查詢、去重、排序、分組等操作。 遍歷: 過濾: 查詢: 去重: 排序: 分組:

    2024年02月10日
    瀏覽(106)
  • JAVA對象、List、Map和JSON之間的相互轉(zhuǎn)換

    JAVA對象、List、Map和JSON之間的相互轉(zhuǎn)換

    參考文章: Java-json相關(guān)轉(zhuǎn)換,JSONObject與實(shí)體類/map互轉(zhuǎn)、List/List<map>和JSONArray互轉(zhuǎn)、獲取JSONObject中的key value、字符串String轉(zhuǎn)換等 【JSON轉(zhuǎn)換】String與JSONObject、JSONArray、JAVA對象和List 的相互轉(zhuǎn)換

    2024年02月03日
    瀏覽(65)
  • Java 把 Map 的值(Value)轉(zhuǎn)換為 Array, List 或 Set

    Java 把 Map 的值(Value)轉(zhuǎn)換為 Array, List 或 Set

    在這篇短文中,我們將會展示如何把 Map 中的值取出來,轉(zhuǎn)換為一個(gè) Array, 、 List 或者一個(gè) Set 。 當(dāng)然,你可以使用 Java JDK 來進(jìn)行轉(zhuǎn)換,你也可以使用 Guava 來進(jìn)行轉(zhuǎn)換。 首先,讓我們來看看,如何使用原生的 Java JDK把一個(gè) Map 的值換行為 Array。 在上面的代碼中,我們使用了

    2023年04月23日
    瀏覽(33)
  • <Java工具類>json字符串、List Map,List 對象轉(zhuǎn)換為相應(yīng)的JavaBean對象

    依賴: 工具類(直接上代碼): 使用場景: (1).使用泛型方法:把json字符串轉(zhuǎn)換為相應(yīng)的JavaBean對象 ; 一般用于:Controller層: 例如: (2).List Map轉(zhuǎn)換List 對象:如List,將第二個(gè)參數(shù)傳遞為Student對象; (3).List 對象轉(zhuǎn)換List Map:

    2024年02月12日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包