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

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

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

在這里插入圖片描述

git倉庫直達

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

一. 冷靜分析

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

二. 直接開裝

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

定義封裝對象

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

2.1 初級炫

 System.out.println("map1: ");
        Map<String, List<String>> collect1 = strings.stream().map(e -> { //封裝成對象
            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相同時value的處理辦法,直接合并List
            oldList.addAll(newList);
            return oldList;
        }));
        collect1.forEach((k,v)->{
            System.out.printf(k+" { ");
            String vList = v.stream().collect(Collectors.joining(",")); //加上逗號,最后一個不加
            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(",")); //加上逗號,最后一個不加
            System.out.printf(vList);
            System.out.printf(" }");
            System.out.println();
        });
        System.out.println();

結(jié)果如下

在這里插入圖片描述

2.3 高級炫

用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與對應(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炫

這個不能處理重復(fù)value,只是將單一Map聚合到一個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é)果 將多個單KV的Map組合成一個Map
            accMap.putAll(singleMap);
            return accMap;
        });

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

在這里插入圖片描述

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

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

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

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

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

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

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

    springBoot項目打包idea的多種方法

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

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

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

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

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

    Java的項目構(gòu)建工具Maven的配置和使用教程

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

    CORS跨域問題常用解決方法代碼實例

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

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

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

    本溪市| 江西省| 白朗县| 南丹县| 阳新县| 乌海市| 贵溪市| 广南县| 通州区| 肃南| 兖州市| 当涂县| 固镇县| 曲松县| 宁城县| 平乐县| 兴文县| 台中市| 临安市| 怀远县| 绵阳市| 哈密市| 徐闻县| 桃江县| 长兴县| 太湖县| 新乡县| 屏边| 玉环县| 东山县| 崇礼县| 东城区| 宜君县| 临洮县| 贡觉县| 普安县| 应城市| 兰溪市| 镇康县| 辽源市| 义马市|