Java - 函數式編程(1): lambda表達式入門

關於lambda表達式

           Lambda 是Jdk8推出的一個新特性,允許把函數作爲一個方法的參數(函數作爲參數傳遞進方法中)。

           Lambda表達式只支持函數式接口  也就是只有一個抽象方法的接口。用來實現接口

           使用 Lambda 表達式可以使代碼變的更加簡潔緊湊,同時其實是在要求我們想的更多,寫的更少。

基礎表達式寫法

(params) -> expression
(params) -> statement
(params) -> { statements }

// 1. 不需要參數,返回值爲 5  
() -> 5  
  
// 2. 接收一個參數(數字類型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2個參數(數字),並返回他們的差值  
(x, y) -> x – y  
  
// 4. 接收2個int型整數,返回他們的和  
(int x, int y) -> x + y  
  
// 5. 接受一個 string 對象,並在控制檯打印,不返回任何值(看起來像是返回void)  
(String s) -> System.out.print(s)

 常見lambda表達式使用場景

  • 替代匿名內部類                                                                                                                                                                        最常見的就是創建線程了,用()->就可以代替整個匿名內部類,()中可以傳唯一方法的參數,->後是方法的實現。其實就像是簡化具體類的創建,不過只針對只有一個方法的接口、抽象類。

    	public static void main(String[] args) {
    		Thread thread1 = new Thread(new Runnable() {
    			
    			@Override
    			public void run() {
    				System.out.println(add(1, 2));
    				
    			}
    		});
    		thread1.start();
    		
    		new Thread( () -> System.out.println(add(2, 2))).start(); 
    
    	}
    	public static int add(int a, int b) {
    	
    		return a + b;
    	} 
  • 使用lambda表達式對集合進行迭代

    public static void main(String[] args) {
            //遍歷list
    		List<String> list = Arrays.asList("a", "b", "c", "d");
    		List<String> newList = new ArrayList<>();
    		list.forEach(str -> add(str, newList));
    		System.out.println(newList.size());
    		newList.forEach(str -> System.out.println(str));
           
            //遍歷map
            Map<Integer, String> map = new HashMap<>();
    		map.put(1, "a");
    		map.put(2, "b");
    		map.forEach((k,v) -> System.out.println(k +"  "+ v));
    
            //遍歷set
    		Set<String> set = new HashSet<>();
    		set.add("a");
    		set.add("b");
    		set.forEach(str -> System.out.println(str));
    
            //根據條件過濾
            List<Integer> list = new ArrayList();
            list.stream().filter(x -> x > 5);
    	}
    	
    	private static void add(String str, List<String> list) {
    		list.add(str);
    	}

    3.用lambda表達式實現map

     需要用到JDK8新特性Stream,後續繼續學習這個。Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)

    	public static void main(String[] args) {
            //list轉map,collect取決與傳入的Collectors規則
            //Collectors.toMap()會收集list,按定義的規則轉成map
    		List<String> list = Arrays.asList("a", "b", "c", "d");
    		Map map = list.stream().collect(Collectors.toMap(k -> k+1, v -> v+"a"));
    		System.out.println(map);
    	}

          

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章