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)文章
在SpringBoot項目中使用Spring Cloud Sentinel實現(xiàn)流量控制
隨著微服務(wù)架構(gòu)的流行,服務(wù)之間的調(diào)用變得越來越頻繁和復(fù)雜,流量控制是保障系統(tǒng)穩(wěn)定性的重要手段之一,它可以幫助我們避免因過載而導(dǎo)致的服務(wù)不可用,本文將介紹如何在Spring Boot項目中使用Spring Cloud Sentinel來實現(xiàn)流量控制,需要的朋友可以參考下2024-08-08
Java?HashMap中除了死循環(huán)之外的那些問題
這篇文章主要介紹了Java?HashMap中除了死循環(huán)之外的那些問題,這些問題大致可以分為兩類,程序問題和業(yè)務(wù)問題,下面文章我們一個一個來看,需要的小伙伴可以參考一下2022-05-05
利用Java實現(xiàn)為Word文檔中的文本與段落添加邊框
在日常的 Java 應(yīng)用開發(fā)中,我們經(jīng)常需要與各種文檔格式打交道,本文將介紹如何使用 Java 為 Word 文檔中的指定文本或段落添加邊框,需要的可以了解下2025-10-10
Java中的讀寫鎖ReentrantReadWriteLock源碼分析
這篇文章主要介紹了Java中的讀寫鎖ReentrantReadWriteLock源碼分析,ReentrantReadWriteLock 分為讀鎖和寫鎖兩個實例,讀鎖是共享鎖,可被多個線程同時使用,寫鎖是獨占鎖,持有寫鎖的線程可以繼續(xù)獲取讀鎖,反之不行,需要的朋友可以參考下2023-12-12
Maven工程引入依賴失敗Dependencies全部飄紅問題
這篇文章主要介紹了Maven工程引入依賴失敗Dependencies全部飄紅問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
SpringBoot項目中分頁插件PageHelper無效的問題及解決方法
這篇文章主要介紹了解決SpringBoot項目中分頁插件PageHelper無效的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06

