Java實(shí)現(xiàn)stream的三個(gè)常用方式(toMap,groupingBy,findFirst)
一、stream().findFirst().orElse(null)
最簡(jiǎn)單開始:
1:查詢/刪除時(shí),接口入?yún)⒆詈脤懗膳康模ú恍枰峁﹩蝹€(gè)參數(shù)的查詢/刪除)。
2:拒絕list.get(0)的當(dāng)時(shí),改用stream().findFirst().orElse(null)。
/** * LambdaQueryWrapper 沒找到就返回null,找到了返回第一條 */ @RequestMapping(value = "getOne", method = RequestMethod.POST) public ListStream getOne() { return listStreamService.list(new LambdaQueryWrapper<ListStream>() .eq(ListStream::getDelFlag, 0) .eq(ListStream::getAge, 24) ).stream().findFirst().orElse(null); }
二、toMap
業(yè)務(wù)場(chǎng)景:需要取出listA中指定某條數(shù)據(jù)。
拒絕循環(huán)判斷,現(xiàn)將數(shù)據(jù)轉(zhuǎn)成Map<Long,Entity>,通過map.get(Key) 獲取指定數(shù)據(jù)
key:id
value:數(shù)據(jù)
@RequestMapping(value = "listToMap", method = RequestMethod.POST) public void listToMap() { //getList List<ListStream> list = listStreamService.list(); //key:value = id:lisStream Map<Long, ListStream> result = list.stream() .collect(Collectors.toMap(ListStream::getId, v -> v)); //打印結(jié)果 for (Map.Entry<Long, ListStream> entry : result.entrySet()) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); System.out.println("--------------------"); } }
三、groupingBy
業(yè)務(wù)場(chǎng)景:有100個(gè)人,年齡分部在18-30歲。要求按照年齡進(jìn)行分組
key:年齡
value:數(shù)據(jù)列表
@RequestMapping(value = "listToMapGroup", method = RequestMethod.POST) public void listToMapGroup() { List<ListStream> list = listStreamService.list(); //按照age進(jìn)行分組 Map<Integer, List<ListStream>> result = list.stream() .collect(Collectors.groupingBy(ListStream::getAge)); //打印結(jié)果 result.forEach((k, v) -> { System.out.println(k); System.out.println(v); System.out.println("--------------------"); }); }
四、Lists.newArrayList()
初始化一個(gè)有值的List。拒絕list.add()、list.addAll()
public static void main(String[] args) { List<String> strList = Lists.newArrayList("1","2","3"); System.out.println(strList); }
總結(jié)
1:拒絕反復(fù)請(qǐng)求數(shù)據(jù)庫(減少io),一個(gè)業(yè)務(wù)里,一張表盡量只查一次(提前將入?yún)⒕酆?,統(tǒng)一請(qǐng)求數(shù)據(jù)庫生成Map(Long,Entity),后續(xù)要用指定數(shù)據(jù)時(shí),從map中獲?。?。
2:請(qǐng)求mapper里盡量不含有業(yè)務(wù)邏輯,將mapper的方法考慮由service統(tǒng)一提供接口。避免mapper到處飛的情況。
每個(gè)service只能用自己的mapper,通過注入其他service從而調(diào)用其他mapper
到此這篇關(guān)于Java實(shí)現(xiàn)stream的三個(gè)常用方式(toMap,groupingBy,findFirst)的文章就介紹到這了,更多相關(guān)Java stream常用方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java通過HttpServletRequest獲取post請(qǐng)求中的body內(nèi)容的方法
本篇文章主要介紹了java通過HttpServletRequest獲取post請(qǐng)求中的body內(nèi)容的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02SpringBoot+MinIO實(shí)現(xiàn)文件上傳、讀取、下載、刪除的使用示例
本文主要介紹了SpringBoot+MinIO實(shí)現(xiàn)文件上傳、讀取、下載、刪除的使用示例,詳細(xì)介紹每個(gè)功能實(shí)現(xiàn)的步驟和代碼示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10SpringMVC @ResponseBody 415錯(cuò)誤處理方式
這篇文章主要介紹了SpringMVC @ResponseBody 415錯(cuò)誤處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11JAVA簡(jiǎn)單工廠模式(從現(xiàn)實(shí)生活角度理解代碼原理)
本文主要介紹了JAVA簡(jiǎn)單工廠模式(從現(xiàn)實(shí)生活角度理解代碼原理)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03JDBC中PreparedStatement詳解以及應(yīng)用場(chǎng)景實(shí)例介紹
PreparedStatement對(duì)象代表的是一個(gè)預(yù)編譯的SQL語句,用它提供的setter方法可以傳入查詢的變量,這篇文章主要給大家介紹了關(guān)于JDBC中PreparedStatement詳解以及應(yīng)用場(chǎng)景實(shí)例介紹的相關(guān)資料,需要的朋友可以參考下2024-02-02SpringBoot如何設(shè)置404、500返回統(tǒng)一格式j(luò)son
這篇文章主要介紹了SpringBoot如何設(shè)置404、500返回統(tǒng)一格式j(luò)son問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08idea 普通文件夾 轉(zhuǎn)換成 module操作
這篇文章主要介紹了idea 普通文件夾 轉(zhuǎn)換成 module操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08Springboot入門案例及部署項(xiàng)目的詳細(xì)過程
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程,本文給大家分享一個(gè)入門案例使用Springboot1.5.9搭建,具體配置部署過程跟隨小編一起看看吧2021-07-07