欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用Java Stream寫出既高雅又裝*的代碼

 更新時(shí)間:2021年08月20日 16:42:54   作者:ktoking  
如何讓同事看不懂你寫的代碼,然后覺得你非常牛逼,這里用到了stream()與Lambda,需要有點(diǎn)基礎(chǔ),沒基礎(chǔ)你炫個(gè)🔨優(yōu)雅永不過時(shí)~ 看下面文章時(shí)記得穿燕尾服,拿高腳杯

在這里插入圖片描述

git倉庫直達(dá)

List<String> strings = Lists.newArrayList("name=kk", "sex=1", "tel=1111", "email=xx@qq.com","name=ww","name=yy");

一. 冷靜分析

如上代碼,你現(xiàn)在要做一個(gè)分組的Map將上面list的值讀取出來,然后分組統(tǒng)計(jì)類似于Map<String,List< String >> 將Key相同的Val全部存到一個(gè)list里面

二. 直接開裝

不會(huì)真有人還直接遍歷吧,那別人不就看的懂了~ 為了炫技直接裝一波

定義封裝對(duì)象

  	@Data
    @Builder
    static class ObiectMap{
        private String key;
        private String value;
    }

2.1 初級(jí)炫

 System.out.println("map1: ");
        Map<String, List<String>> collect1 = strings.stream().map(e -> { //封裝成對(duì)象
            String[] split = e.split("\\=", 2);
            return ObiectMap.builder().key(split[0]).value(split[1]).build();
        }).collect(Collectors.toMap(ObiectMap::getKey,v->Lists.newArrayList(v.getValue()), (List<String> newList, List<String> oldList) -> { // Collectors.toMap(a,b,(n1,n2)) -> a代表Map的key (這里直接用方法引用拿到key) b代表value (n1,n2)代表key相同時(shí)value的處理辦法,直接合并List
            oldList.addAll(newList);
            return oldList;
        }));
        collect1.forEach((k,v)->{
            System.out.printf(k+" { ");
            String vList = v.stream().collect(Collectors.joining(",")); //加上逗號(hào),最后一個(gè)不加
            System.out.printf(vList);
            System.out.printf(" }");
            System.out.println();
        });
        System.out.println();

結(jié)果如下

在這里插入圖片描述

2.2 普通炫

System.out.println("map2: ");
        Map<String, List<String>> collect2 = strings.stream().map(e -> {
            String[] split = e.split("\\=", 2);
            return ObiectMap.builder().key(split[0]).value(split[1]).build();
        }).collect(Collectors.groupingBy(ObiectMap::getKey, Collectors.mapping(ObiectMap::getValue, Collectors.toList()))); //Collectors.groupingBy(a,b) a還是通過key來分組 ,b將value收集起來做list value
        collect2.forEach((k,v)->{
            System.out.printf(k+" { ");
            String vList = v.stream().collect(Collectors.joining(",")); //加上逗號(hào),最后一個(gè)不加
            System.out.printf(vList);
            System.out.printf(" }");
            System.out.println();
        });
        System.out.println();

結(jié)果如下

在這里插入圖片描述

2.3 高級(jí)炫

用Guava來炫

import com.google.common.collect.*
System.out.println("map3: get name List with Multimap");
        List<ObiectMap> collect3 = strings.stream().map(e -> {
            String[] split = e.split("\\=", 2);
            return ObiectMap.builder().key(split[0]).value(split[1]).build();
        }).collect(Collectors.toList());
        Multimap<String, String> multiMap = ArrayListMultimap.create();  //使用Guava的Multimap來存 value直接是collection,可以隨意轉(zhuǎn)換
        collect3.forEach(c -> multiMap.put(c.getKey(), c.getValue()));
        System.out.println(multiMap.get("name").stream().collect(Collectors.joining(","))); 
        System.out.println();

結(jié)果如下

在這里插入圖片描述

2.4 再炫一波 拿到當(dāng)前key與對(duì)應(yīng)的數(shù)量

System.out.println("map4: get name with count");
        Map<String, Long> collect4 = strings.stream().map(e -> {
            String[] split = e.split("\\=", 2);
            return ObiectMap.builder().key(split[0]).value(split[1]).build();
        }).collect(Collectors.groupingBy(ObiectMap::getKey, Collectors.counting())); // 拿到數(shù)量
        collect4.forEach((k,v)->{
            System.out.printf(k+" { ");
            System.out.printf("%d",v);
            System.out.printf(" }");
            System.out.println();
        });
        System.out.println();

結(jié)果如下

在這里插入圖片描述

2.5 Map Reduce炫

這個(gè)不能處理重復(fù)value,只是將單一Map聚合到一個(gè)Map

List<String> strings = Lists.newArrayList("name=kk", "sex=1", "tel=1111", "email=xx@qq.com");
        Map<String, String> reduce = strings.stream().map(e -> {
            String[] split = e.split("\\=", 2); // 正則劃分為單map
            return Collections.singletonMap(split[0], split[1]);
        }).reduce(new HashMap<String, String>(), (accMap, singleMap) -> { // reduce(a,(b,c))-> a 為初始值 b為累加值 c為當(dāng)前值 操作返回當(dāng)前值與累加值后的結(jié)果 將多個(gè)單KV的Map組合成一個(gè)Map
            accMap.putAll(singleMap);
            return accMap;
        });

        reduce.forEach((k,v)->{
            System.out.println(k+" = "+v);
        });

在這里插入圖片描述

好家伙直接裝一波,直接起飛~ 制作不易,轉(zhuǎn)載請(qǐng)標(biāo)注

到此這篇關(guān)于如何用Java Stream寫出既高雅又裝*的代碼的文章就介紹到這了,更多相關(guān)Java Stream內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java方法重寫和super關(guān)鍵字實(shí)例詳解

    java方法重寫和super關(guān)鍵字實(shí)例詳解

    這篇文章主要介紹了java方法重寫和super關(guān)鍵字實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • java模擬客戶端向服務(wù)器上傳文件

    java模擬客戶端向服務(wù)器上傳文件

    這篇文章主要為大家詳細(xì)介紹了java模擬客戶端向服務(wù)器上傳文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 一文詳解gRPC快速整合SpringCloud

    一文詳解gRPC快速整合SpringCloud

    這篇文章主要為大家介紹gRPC快速整合SpringCloud的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • java實(shí)現(xiàn)收藏名言語句臺(tái)詞的app

    java實(shí)現(xiàn)收藏名言語句臺(tái)詞的app

    本文給大家分享的是使用java制作的記錄名人名言臺(tái)詞等等讓你難忘的語句的APP的代碼,非常的實(shí)用,有需要的小伙伴可以參考下。
    2015-04-04
  • 基于Hutool的圖片驗(yàn)證碼功能模塊實(shí)現(xiàn)

    基于Hutool的圖片驗(yàn)證碼功能模塊實(shí)現(xiàn)

    為了提高系統(tǒng)的安全性,防止接口被暴力刷新,驗(yàn)證碼是個(gè)好的手段,圖片驗(yàn)證碼沒有短信驗(yàn)證碼的費(fèi)用,其是個(gè)人開發(fā)者學(xué)習(xí)的重點(diǎn),這篇文章主要介紹了基于Hutool的圖片驗(yàn)證碼功能模塊實(shí)現(xiàn),需要的朋友可以參考下
    2022-10-10
  • Java超詳細(xì)分析@Autowired原理

    Java超詳細(xì)分析@Autowired原理

    @Autowired注解可以用在類屬性,構(gòu)造函數(shù),setter方法和函數(shù)參數(shù)上,該注解可以準(zhǔn)確地控制bean在何處如何自動(dòng)裝配的過程。在默認(rèn)情況下,該注解是類型驅(qū)動(dòng)的注入
    2022-06-06
  • Java中泛型學(xué)習(xí)之細(xì)節(jié)篇

    Java中泛型學(xué)習(xí)之細(xì)節(jié)篇

    泛型在java中有很重要的地位,在面向?qū)ο缶幊碳案鞣N設(shè)計(jì)模式中有非常廣泛的應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于Java中泛型細(xì)節(jié)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • SpringBoot執(zhí)行異步任務(wù)Async介紹

    SpringBoot執(zhí)行異步任務(wù)Async介紹

    這篇文章主要為大家介紹了SpringBoot執(zhí)行異步任務(wù)Async示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java比較器comparator使用示例分享

    java比較器comparator使用示例分享

    這篇文章主要介紹了java比較器comparator使用示例,需要的朋友可以參考下
    2014-03-03
  • SpringBoot集成Shiro進(jìn)行權(quán)限控制和管理的示例

    SpringBoot集成Shiro進(jìn)行權(quán)限控制和管理的示例

    這篇文章主要介紹了SpringBoot集成Shiro進(jìn)行權(quán)限控制和管理的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03

最新評(píng)論