java lambda 表達式中的雙冒號的用法說明 ::
雙冒號運算就是Java中的[方法引用],[方法引用]的格式是
類名::方法名
注意是方法名哦,后面沒有括號“()”噠。為啥不要括號,因為這樣的是式子并不代表一定會調(diào)用這個方法。這種式子一般是用作Lambda表達式,Lambda有所謂懶加載嘛,不要括號就是說,看情況調(diào)用方法。
例如
表達式:
person -> person.getAge();
可以替換成
Person::getAge
表達式
() -> new HashMap<>();
可以替換成
HashMap::new
這種[方法引用]或者說[雙冒號運算]對應(yīng)的參數(shù)類型是Function<T,R> T表示傳入類型,R表示返回類型。比如表達式person -> person.getAge(); 傳入?yún)?shù)是person,返回值是person.getAge(),那么方法引用Person::getAge就對應(yīng)著Function<Person,Integer>類型。
下面這段代碼,進行的操作是,把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); }
補充知識:Java解析屬性配置文件并給占位符傳參
我就廢話不多說了,大家還是直接看代碼吧~
//注冊功能 public void register(User user){ //補齊數(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 表達式中的雙冒號的用法說明 ::就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Pinpoint對SpringCloud微服務(wù)項目實現(xiàn)全鏈路監(jiān)控的問題
這篇文章主要介紹了基于Pinpoint對SpringCloud微服務(wù)項目實現(xiàn)全鏈路監(jiān)控的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容
這篇文章主要介紹了Springboot應(yīng)用中過濾器如何修改response的header和body內(nèi)容問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Java?EasyExcel實現(xiàn)合并相同內(nèi)容單元格與動態(tài)標題功能
這篇文章主要為大家詳細介紹了Java?EasyExcel如何實現(xiàn)合并相同內(nèi)容單元格與動態(tài)標題功能,文中的示例代碼講解詳細,有需要的小伙伴可以參考下2023-12-12Springboot自帶定時任務(wù)實現(xiàn)動態(tài)配置Cron參數(shù)方式
這篇文章主要介紹了Springboot自帶定時任務(wù)實現(xiàn)動態(tài)配置Cron參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Java中的ReentrantReadWriteLock使用詳解
這篇文章主要介紹了Java中的ReentrantReadWriteLock使用詳解,ReentrantReadWriteLock是Java中的一個鎖實現(xiàn),它提供了讀寫分離的功能,這種讀寫分離的機制可以提高并發(fā)性能,特別適用于讀多寫少的場景,需要的朋友可以參考下2023-11-11Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項目踩過的坑
IDEA旗艦版可以直接創(chuàng)建Spring MVC項目,但創(chuàng)建后的項目并不是直接就可以運行,還需要進行一些配置。這篇文章主要介紹了Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項目踩坑記 ,需要的朋友可以參考下2020-03-03