java lambda 表達(dá)式中的雙冒號(hào)的用法說明 ::
雙冒號(hào)運(yùn)算就是Java中的[方法引用],[方法引用]的格式是
類名::方法名
注意是方法名哦,后面沒有括號(hào)“()”噠。為啥不要括號(hào),因?yàn)檫@樣的是式子并不代表一定會(huì)調(diào)用這個(gè)方法。這種式子一般是用作Lambda表達(dá)式,Lambda有所謂懶加載嘛,不要括號(hào)就是說,看情況調(diào)用方法。
例如
表達(dá)式:
person -> person.getAge();
可以替換成
Person::getAge
表達(dá)式
() -> new HashMap<>();
可以替換成
HashMap::new
這種[方法引用]或者說[雙冒號(hào)運(yùn)算]對(duì)應(yīng)的參數(shù)類型是Function<T,R> T表示傳入類型,R表示返回類型。比如表達(dá)式person -> person.getAge(); 傳入?yún)?shù)是person,返回值是person.getAge(),那么方法引用Person::getAge就對(duì)應(yīng)著Function<Person,Integer>類型。
下面這段代碼,進(jìn)行的操作是,把List<String>里面的String全部大寫并返還新的ArrayList<String>,在前面的例子中我們是這么寫的:
@Test public void convertTest() { List<String> collected = new ArrayList<>(); collected.add("alpha"); collected.add("beta"); collected = collected.stream().map(string -> string.toUpperCase()).collect(Collectors.toList()); System.out.println(collected); }
現(xiàn)在也可以被替換成下面的寫法:
@Test public void convertTest() { List<String> collected = new ArrayList<>(); collected.add("alpha"); collected.add("beta"); collected = collected.stream().map(String::toUpperCase).collect(Collectors.toCollection(ArrayList::new));//注意發(fā)生的變化 System.out.println(collected); }
補(bǔ)充知識(shí):Java解析屬性配置文件并給占位符傳參
我就廢話不多說了,大家還是直接看代碼吧~
//注冊(cè)功能 public void register(User user){ //補(bǔ)齊數(shù)據(jù) user.setUid(CommonUtils.uuid()); user.setStatus(false); user.setActivationCode(CommonUtils.uuid() + CommonUtils.uuid()); try { userDao.save(user); } catch (Exception e) { throw new RuntimeException(); } //發(fā)送郵件 //加載配置文件 Properties properties = new Properties(); try { properties.load(this.getClass().getClassLoader().getResourceAsStream("email_template.properties")); } catch (IOException e1) { throw new RuntimeException(); } String host = properties.getProperty("host"); String username = properties.getProperty("username"); String password = properties.getProperty("password"); String from = properties.getProperty("from"); String to = user.getEmail(); String subject = properties.getProperty("subject"); //把占位符用后面的參數(shù)替換,后面參數(shù)可變 String content = MessageFormat.format(properties.getProperty("content"), user.getActivationCode()); //發(fā)送郵件3步曲 Session session = MailUtils.createSession(host, username, password); Mail mail = new Mail(from, to, subject, content); try { MailUtils.send(session, mail); } catch (Exception e) { throw new RuntimeException(); } }
以上這篇java lambda 表達(dá)式中的雙冒號(hào)的用法說明 ::就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Pinpoint對(duì)SpringCloud微服務(wù)項(xiàng)目實(shí)現(xiàn)全鏈路監(jiān)控的問題
這篇文章主要介紹了基于Pinpoint對(duì)SpringCloud微服務(wù)項(xiàng)目實(shí)現(xiàn)全鏈路監(jiān)控的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Spring?MVC??接受請(qǐng)求參數(shù)的方法
了解HTTP請(qǐng)求的GET和POST方法中如何攜帶參數(shù),以及SpringMVC中如何接收這些參數(shù),GET方法通過URL傳遞參數(shù),而POST方法通常在請(qǐng)求體中傳遞,SpringMVC使用注解如@RequestParam和@RequestBody來綁定參數(shù)到控制器方法2024-09-09Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容
這篇文章主要介紹了Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java?EasyExcel實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能
這篇文章主要為大家詳細(xì)介紹了Java?EasyExcel如何實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下2023-12-12Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式
這篇文章主要介紹了Springboot自帶定時(shí)任務(wù)實(shí)現(xiàn)動(dòng)態(tài)配置Cron參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java中的ReentrantReadWriteLock使用詳解
這篇文章主要介紹了Java中的ReentrantReadWriteLock使用詳解,ReentrantReadWriteLock是Java中的一個(gè)鎖實(shí)現(xiàn),它提供了讀寫分離的功能,這種讀寫分離的機(jī)制可以提高并發(fā)性能,特別適用于讀多寫少的場(chǎng)景,需要的朋友可以參考下2023-11-11Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項(xiàng)目踩過的坑
IDEA旗艦版可以直接創(chuàng)建Spring MVC項(xiàng)目,但創(chuàng)建后的項(xiàng)目并不是直接就可以運(yùn)行,還需要進(jìn)行一些配置。這篇文章主要介紹了Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項(xiàng)目踩坑記 ,需要的朋友可以參考下2020-03-03