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

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

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

在這里插入圖片描述

git倉(cāng)庫(kù)直達(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)文章希望大家以后多多支持腳本之家!

  • SpringBoot整合jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密

    SpringBoot整合jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密

    Jasypt是一個(gè)專注于簡(jiǎn)化Java加密操作的開源工具,這篇文章主要為大家介紹了詳細(xì)介紹了如何使用jasypt實(shí)現(xiàn)重要數(shù)據(jù)加密,感興趣的小伙伴可以了解下
    2025-03-03
  • Java輸入學(xué)號(hào)、姓名、年齡并對(duì)其進(jìn)行輸出的實(shí)現(xiàn)方法

    Java輸入學(xué)號(hào)、姓名、年齡并對(duì)其進(jìn)行輸出的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java輸入學(xué)號(hào)、姓名、年齡并對(duì)其進(jìn)行輸出的實(shí)現(xiàn)方法,在計(jì)算機(jī)編程中,輸出學(xué)號(hào)和姓名是一個(gè)常見的任務(wù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • springBoot項(xiàng)目打包idea的多種方法

    springBoot項(xiàng)目打包idea的多種方法

    這篇文章主要介紹了springBoot項(xiàng)目打包idea的多種方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot實(shí)現(xiàn)網(wǎng)站的登陸注冊(cè)邏輯記錄

    SpringBoot實(shí)現(xiàn)網(wǎng)站的登陸注冊(cè)邏輯記錄

    登陸注冊(cè)功能是我們?nèi)粘i_發(fā)中經(jīng)常遇到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)網(wǎng)站的登陸注冊(cè)邏輯的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • Java 如何實(shí)現(xiàn)一個(gè)http服務(wù)器

    Java 如何實(shí)現(xiàn)一個(gè)http服務(wù)器

    這篇文章主要介紹了Java 如何實(shí)現(xiàn)一個(gè)http服務(wù)器,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-11-11
  • Java的項(xiàng)目構(gòu)建工具M(jìn)aven的配置和使用教程

    Java的項(xiàng)目構(gòu)建工具M(jìn)aven的配置和使用教程

    Maven是Java世界中的項(xiàng)目管理和構(gòu)建自動(dòng)化工具,基于POM項(xiàng)目對(duì)象模型的思想,下面我們就具體來看一下具體的Java的項(xiàng)目構(gòu)建工具M(jìn)aven的配置和使用教程:
    2016-05-05
  • CORS跨域問題常用解決方法代碼實(shí)例

    CORS跨域問題常用解決方法代碼實(shí)例

    這篇文章主要介紹了CORS跨域問題常用解決方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java的SimpleDateFormat線程不安全的幾種解決方案

    java的SimpleDateFormat線程不安全的幾種解決方案

    但我們知道SimpleDateFormat是線程不安全的,處理時(shí)要特別小心,要加鎖或者不能定義為static,要在方法內(nèi)new出對(duì)象,再進(jìn)行格式化,本文就介紹了幾種方法,感興趣的可以了解一下
    2021-08-08
  • 最新評(píng)論

    武义县| 克山县| 吉安市| 思茅市| 游戏| 迭部县| 徐汇区| 卫辉市| 青阳县| 运城市| 寿光市| 永泰县| 资溪县| 女性| 龙门县| 辽中县| 新晃| 永丰县| 蕲春县| 汉中市| 平南县| 嘉荫县| 通榆县| 苍南县| 班玛县| 阳山县| 江津市| 靖西县| 德庆县| 浑源县| 吴桥县| 景东| 黄龙县| 章丘市| 拜泉县| 文成县| 曲麻莱县| 杭锦旗| 淄博市| 祁阳县| 遵义市|