1. 程式人生 > >Java8新特性——Map的新方法

Java8新特性——Map的新方法

今天是高考的日子,是大四師兄師姐答辯畢業的日子。一代又來,一代又去。好久沒寫部落格,藉此特殊日子整理一下前不久學java8新特性時寫的程式碼,留下痕跡。(本部落格的程式碼根據 學習整理,加上個人的理解而成,關於某個新特性的介紹程式碼裡的註釋已經闡述清楚,故不再寫文字介紹,直接看程式碼吧!)

    本篇介紹java8的新特性之一:Map的新方法。

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

/**
 * Map
 */
public class NewMap {

	@Test
	public void testMap(){
		
		Map<Integer, String> map = new HashMap<>();
		for(int i=0; i<10; i++){
			//putIfAbsent使得我們不用寫是否為null值的檢測語句;
			map.putIfAbsent(i, "val_"+i);
		}
		
		//-------1------maps不支援流。然而現在maps包括了許多新的非常有用的方法用於執行通用任務:		
		//forEach使用consumer來對map中的每個元素進行操作,執行通用任務。
		map.forEach( (key,value) -> System.err.println(key +" : "+value) );
		
		//----------2-------------------使用功能性函式在map裡執行程式碼:		
		//將key為3對應的值(val_3)改為  "val_3"+3*10 = val_330
		map.computeIfPresent(3, (num, val) -> val + num*10);  
		System.err.println(map.get(3)); //val_330
		  
		//將key為9對應的值(val_9)改為  null
		map.computeIfPresent(9, (num, val) -> null);  
		map.containsKey(9);     // false  
		  
		//將key為23對應的值(null)改為  "val_23"
		map.computeIfAbsent(23, num -> "val" + num);  
		map.containsKey(23);    // true  
		
		map.put(3, null);
		//如果key為3對應的值改為null, 將其值改為"bam"
		map.computeIfAbsent(3, num -> "bam");  
		System.err.println(map.get(3));// bam  
		
		//---------3--------------刪除給定鍵所對應的元素。刪除操作還需要滿足給定的值需要和map中的值相等:
		map.remove(3, "val3");  
		map.get(3);             // val33  
		  
		map.remove(3, "val33");  
		map.get(3);             // null  	 
		
		
		//----------4--------其他一些幫助性方法:
		map.getOrDefault(44, "404 not found");
		
		//---------------5----------------合併map中的實體
		//此時map.get(9)=null
		map.merge(9, "val999", (value, newValue) -> value.concat(newValue));  
		map.get(9);             // val999
		System.err.println(map.get(9));
		  
		map.merge(9, "concat", (value, newValue) -> value.concat(newValue));  
		map.get(9);             // val999concat  
		System.err.println(map.get(9));
		 	
	}
}

詳情請見這篇部落格: