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

Java8如何利用Lambda快速生成map、多層嵌套map

 更新時間:2022年09月29日 10:00:25   作者:普通網(wǎng)友  
這篇文章主要介紹了Java8如何利用Lambda快速生成map、多層嵌套map問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

利用Lambda快速生成map、多層嵌套map

List 轉(zhuǎn)為 Map<id, bean>

  • User是List對象的元素,List
  • List對象的變量名為:userList
  • id 將作為 Map 的 Key
Map<String, User> idMap =
userList.stream().collect(
Collectors.toMap(User::getId, b->b)
);

一主多子 javaBean List 轉(zhuǎn)為 Map<id, Map<id, itemBean> >

  • 一主,主Bean: User
  • 多子,子Bean: UserItem
  • 集合:List
  • 轉(zhuǎn)Map:Map<User_id, Map <UserItem_id, UserItem> >

一主多子的主javaBean為List對象的元素,List

此處List對象的變量為:userList

Map<String, Map<String, UserItem>> collect =?
?? ?userList.stream().collect(
?? ??? ?Collectors.toMap(
?? ??? ??? ?User::getId, b -> {
?? ??? ??? ??? ?return b.getUserItem().stream().collect(
?? ??? ??? ??? ??? ??? ?Collectors.toMap(UserItem::getId, c -> c)
?? ??? ??? ??? ?);
? ? ? ? ? ? }
? ? ? ? )
? ? );

常見的代碼壞味道--多層嵌套,缺乏封裝

1. 多層嵌套

多層嵌套的兩個原因

1.1 if else

最簡單的重構(gòu)手法,提前 return ,也叫 Replace Nested Conditional with Guard Clauses 衛(wèi)語句。

有一些比較激進的看法認為 else 本身就是一種壞味道。

可以使用 idea 的插件 Checkstyle 檢查一下代碼的 圈復(fù)雜度。當圈復(fù)雜度大于某個值的時候,就會報錯。

圈復(fù)雜度的這部分代碼中線性無關(guān)路徑的數(shù)量。

如果一段源碼中不包含控制流語句(條件或決策點),那么這段代碼的圈復(fù)雜度為1,因為這段代碼中只會有一條路徑;如果一段代碼中僅包含一個if語句,且if語句僅有一個條件,那么這段代碼的圈復(fù)雜度為2;包含兩個嵌套的if語句,或是一個if語句有兩個條件的代碼塊的圈復(fù)雜度為3。

第二種解決過多判斷的方案是多態(tài),這就要求從設(shè)計階段就開始考慮實現(xiàn)方案。

注意多態(tài)的本質(zhì)是想要實現(xiàn)對拓展開發(fā),對修改關(guān)閉,所以如果繼承的層級較多,邏輯比較復(fù)雜,就會導(dǎo)致適得其反的效果。

1.2 for 循環(huán)

對集合進行循環(huán)操作推薦使用java8的Stream操作(,mapreduce,map代表操作,collect代表reduce),比如。從本質(zhì)上講Stream也是循環(huán),但是這種語法糖的形式會對各種操作進行分類,進行合理的優(yōu)化處理。

循環(huán)和函數(shù)式編程的區(qū)別不僅僅在寫法上,更體現(xiàn)在思想上。前者描述實現(xiàn)細節(jié),后者描述做什么。

當然,如果在列表轉(zhuǎn)換中使用過多的 lambda 表達式,會導(dǎo)致看起來很吃力,不好理解。這時候長的lambda本身可以提取成為方法。

2. 缺乏封裝

2.1. 過長的消息鏈或者說火車殘骸

第一種缺乏封裝的表現(xiàn)是java類處理不當,可能是設(shè)計的太粗糙,面向過程實現(xiàn)業(yè)務(wù)邏輯導(dǎo)致的。這就要求開發(fā)的時候進行更多的抽象。

比如,不是所有的java類都直接提供所有的getter setter 方法就行,還要根據(jù)業(yè)務(wù)場景進行合理選擇;另外對象內(nèi)部的細節(jié)不需要過多的暴露出去,應(yīng)該做適當?shù)姆庋b。

2.2 基本類型的偏執(zhí)

第二種更高級的缺乏封裝,是指用基本類型代表所有的業(yè)務(wù)數(shù)據(jù)。比如

這是獲取價格的方法,返回一個 double 代表價格。 就算 double 可以保證計算精度,這里也還可以進一步優(yōu)化,比如,經(jīng)常要求商品價格是大于0的,所以會有下面的邏輯

這就是因為 double 作為基本類型并沒有 價格大于0 的方法。 

這里的解決辦法,就是 Replace Primitive with Object ,以對象取代基本類型。

甚至有人認為需要封裝所有的基本類型和字符串,并且使用一流的集合。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot vue項目后端列表接口分頁模糊查詢

    springboot vue項目后端列表接口分頁模糊查詢

    這篇文章主要為大家介紹了springboot vue項目后端列表接口分頁模糊查詢,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java數(shù)組去重復(fù)的18種方法示例

    Java數(shù)組去重復(fù)的18種方法示例

    這篇文章主要為大家介紹了Java數(shù)組去重復(fù)的18種寫法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • SpringBoot如何配置文件給bean賦值問題

    SpringBoot如何配置文件給bean賦值問題

    這篇文章主要介紹了SpringBoot如何配置文件給bean賦值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java多線程 實例解析

    Java多線程 實例解析

    這篇文章主要介紹了Java多線程 實例解析,需要的朋友可以參考下
    2017-04-04
  • Java編程調(diào)用微信接口實現(xiàn)圖文信息推送功能

    Java編程調(diào)用微信接口實現(xiàn)圖文信息推送功能

    這篇文章主要介紹了Java編程調(diào)用微信接口實現(xiàn)圖文信息等推送功能,涉及java微信圖文信息推送接口調(diào)用及相關(guān)文件、字符串編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • 分布式消息隊列RocketMQ概念詳解

    分布式消息隊列RocketMQ概念詳解

    RocketMQ?是阿里開源的分布式消息中間件,跟其它中間件相比,RocketMQ?的特點是純JAVA實現(xiàn),是一套提供了消息生產(chǎn),存儲,消費全過程API的軟件系統(tǒng),本文詳細介紹了分布式消息隊列RocketMQ概念,需要的朋友可以參考下
    2023-05-05
  • Java壓縮之LZW算法字典壓縮與解壓講解

    Java壓縮之LZW算法字典壓縮與解壓講解

    今天小編就為大家分享一篇關(guān)于Java壓縮之LZW算法字典壓縮與解壓講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 在java程序中使用protobuf

    在java程序中使用protobuf

    這篇文章主要介紹了protobuf的基本使用和同java結(jié)合的具體案例,感性興趣的小伙伴可以一起來閱讀下文
    2021-08-08
  • 了解Java多線程的可見性與有序性

    了解Java多線程的可見性與有序性

    這篇文章主要介紹了了解Java多線程的可見性與有序性,在Java內(nèi)存模型中,允許編譯器和處理器對指令進行重排序,但是重排序過程不會影響到單線程程序的執(zhí)行,卻會影響到多線程并發(fā)執(zhí)行的正確性。,需要的朋友可以參考下
    2019-06-06
  • 詳解阿里云maven鏡像庫配置(gradle,maven)

    詳解阿里云maven鏡像庫配置(gradle,maven)

    這篇文章主要介紹了詳解阿里云maven鏡像庫配置(gradle,maven),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論

怀柔区| 永仁县| 安乡县| 凤山县| 六盘水市| 娄烦县| 安吉县| 洞头县| 土默特左旗| 靖西县| 建平县| 桃园市| 钦州市| 彩票| 平顶山市| 呼伦贝尔市| 阳新县| 鹤山市| 聂荣县| 句容市| 崇州市| 晋宁县| 桂林市| 商南县| 临潭县| 繁峙县| 册亨县| 芷江| 普定县| 安康市| 策勒县| 黔东| 台中市| 綦江县| 西平县| 津南区| 赫章县| 广平县| 揭西县| 临朐县| 清水县|