lambda表示式的學習使用
阿新 • • 發佈:2020-07-28
package com.example.demo; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; /** * lambda的測試 * lambda表示式無法單獨出現,它是函式式介面的實現 * 函式式介面:一個介面中只含有一個方法,可在介面上加註解@FunctionalInterface(不是必須) */ public class LambdaTest { public static void main(String[] args) { /** * 1.lambda基本語法 * ()->單行程式碼語句 * (param)-單行程式碼語句,param為引數 * ()->{多行程式碼語句} * (param)->{多行程式碼語句},param為引數*/ Runnable runnable = () -> System.out.println("執行了run方法!"); Runnable runnable1 = () -> { System.out.println("測試測試"); System.out.println("測試測試"); }; //new Thread(runnable).start(); //new Thread(runnable1).start(); /** * 2.方法引用 * 當方法體中的程式碼過長,影響程式碼閱讀性時,可用方法引用 * 靜態方法,ClassName::MethodName,例:Object::equals * 例項方法,Intance::MethodName,例:Object obj=new Object();obj::MethodName * 構造方法,ClassName::new*/ Runnable runnable2 = LambdaTest :: run; //new Thread(runnable2); /** * 3.集合中內部迭代 */ List<User> users = new ArrayList<>(); users.add(new User("jack",22)); users.add(new User("tom",18)); users.forEach((User u)-> System.out.println(u.getName() + ":" + u.getAge()));/** * 4.Stream(流) API * 中間方法返回的永遠是Stream * 最終方法返回的最終結果 */ Stream<User> stream = users.stream(); //過濾大於age大於20的,filter為中間方法 //stream.filter((User u) -> u.getAge() > 20); //所有的年齡大於20歲的User物件,轉換為字串50物件。現在流中只有字串物件了。map為中間方法 //stream.filter((User u) -> u.getAge() > 20).map((User u)->{return "50";}); //返回流中的元素個數,count為最終方法 Long count = stream.filter((User u) -> u.getAge() > 20).map((User u)->{return "50";}).count(); System.out.println(count); } public static void run(){ System.out.println("執行了執行了該方法"); } public LambdaTest(){ System.out.println("執行了構造方法"); } } class User{ private String name; private Integer age; public User(String name, Integer age){ this.name = name; this.age = age; } public String getName(){ return name; } public Integer getAge(){ return age; } }