您好,登錄后才能下訂單哦!
本篇內容介紹了“如何使用Java中Lambda表達式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
理解函數式接口以及 Lambda表達式的發展過程
Lambda表達式及語法
一起來看看具體的使用
你需要注意什么
Lambda的實際運用
1.對集合排序
2.遍歷集合
3.遍歷集合(帶條件)
4.代替 Runnable,開啟一個線程
任何接口,只包含唯一一個抽象方法,就是函數式接口
/** * lambdab表達式的發展 */ public class TestLambda1 { //3.靜態內部類 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("i like lambda2"); } } public static void main(String[] args) { ILike like=new Like(); like.lambda(); like=new Like2(); like.lambda(); //4.局部內部類 class Like3 implements ILike{ @Override public void lambda() { System.out.println("i like lambda3"); } } like=new Like3(); like.lambda(); //5.匿名內部類 like=new ILike() { @Override public void lambda() { System.out.println("i like lambda4"); } }; like.lambda(); //6.用lambda簡化 like=()->{ System.out.println("i like lambda5"); }; like.lambda(); } } //1.定義一個函數式接口 interface ILike{ void lambda(); } //2.實現類 class Like implements ILike{ @Override public void lambda() { System.out.println("i like lambda"); } }
Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)
// 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)
也就是說,不需要事先聲明參數的類型,圓括號可以沒有,大括號可以沒有,返回值可以沒有
public class java8_Lambda_Test { public static final void main(String[] args) { Operator addOper = (a, b) -> a + b; Operator reduceOper = (a, b) -> a - b; Operator multiplyOper = (a, b) -> a * b; Operator DivideOper = (a, b) -> a / b; java8_Lambda_Test test = new java8_Lambda_Test(); System.out.println(test.getResult(3, 3, addOper));//6 System.out.println(test.getResult(3, 3, reduceOper));//0 System.out.println(test.getResult(3, 3, multiplyOper));//9 System.out.println(test.getResult(3, 3, DivideOper));//1 } public int getResult(int a, int b, Operator operator) { return operator.convert(a, b); } public interface Operator { int convert(int a, int b); default int get(int a) { return a; } } }
1.lambda 表達式只能引用標記了 final 的外層局部變量
2.可以直接在 lambda 表達式中訪問外層的局部變量
問題描述:在一個存放了Student對象的list中,按年齡進行排序,輸出排序后的list
Student類
public class Student implements Comparable<Student>{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student student2) { int result =this.age - student2.age; return result; } }
List<Student> list=new ArrayList<>(); Student s1=new Student(); s1.setName("張三"); s1.setAge(28); list.add(s1); Student s=new Student(); s.setName("李四"); s.setAge(22); list.add(s); sortUsingJava8(list); list.forEach((student) -> System.out.println(student.getName() + ":"+student.getAge()));
// 使用 java 8 排序 static void sortUsingJava8(List<Student> list){ Collections.sort(list, (student1, student2) -> student1.compareTo(student2)); }
來康康使用Java7進行排序是這樣的:
// 使用 java 7 排序 private void sortUsingJava7(List<String> list){ Collections.sort(list, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); }
//先準備一個集合 List<Student> list=new ArrayList<>(); Student s1=new Student(); s1.setName("張三"); s1.setAge(28); list.add(s1); Student s=new Student(); s.setName("李四"); s.setAge(22); list.add(s); //使用 lambda 表達式以及函數操作(functional operation) list.forEach((student) -> System.out.println(student.getName() + ":"+student.getAge()));
//帶條件 打印年齡大于等于20的學生的姓名 list.forEach((student)->{ if (student.getAge()>=20) System.out.println(student.getName()); });
Runnable r = new Runnable() { @Override public void run() { //to do something } }; Thread t = new Thread(r); t.start();
現在這樣寫:
Runnable r = () -> { //to do something }; Thread t = new Thread(r); t.start();
你還可以這樣寫:
Thread t = new Thread(() -> { //to do something // such as for for(int i = 0; i < 100; i++){ System.out.println(i); } }); t.start;
“如何使用Java中Lambda表達式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。