java8新特性之lambda表示式(一)
lambda使用案例:
需求1:對List集合中的User按照age的大小進行排序輸出:
1.普通的寫法:
private static List<User> list=new ArrayList<User>();
public static void main(String[] args) {
list.add(new User(34));
list.add(new User(14));
list.add(new User(24));
System.out.println("排序前:"+list.toString());
//對list集合的資料進行按照年齡排序
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
// TODO Auto-generated method stub
return Integer.compare(o1.age, o2.age);
}
});
System.out.println("排序後:"+list.toString());
}
------------------------
輸出結果:
排序前:[34, 14, 24]
排序後:[14, 24, 34]
2.使用lambda的寫法:
private static List<User> list=new ArrayList<User>();
public static void main(String[] args) {
......
System.out.println("排序前:"+list.toString());
//對list集合的資料進行按照年齡排序(現在一行就可以代替上面的排序程式碼)
Collections.sort(list, (o1,o2)->Integer.compare(o1.age, o2.age));
System.out.println("排序後:"+list.toString());
}
------------------------
輸出結果:
排序前:[34, 14, 24]
排序後:[14, 24, 34]
需求2:新開一個子執行緒,並在子執行緒中輸出“helloWord”
1.普通的寫法:
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("HelloWord");
}
}).start();
}
2.使用lambda的寫法:
public static void main(String[] args) {
//使用這個:()->Syso("HelloWord")表示式代替內部類,其實Syso("HelloWord")這個位置可以使用一個方法來代替
new Thread( ()->System.out.println("HelloWord") ).start();
}
案例分析:
lambda表示式:其實就是省略書寫固定的程式碼
下面的程式碼那些是固定的呢?那些是可以省略書寫的呢?
//對list集合的資料進行按照年齡排序
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return Integer.compare(o1.age, o2.age);
}
});
可以省略書寫的是:
1.new Comparator() 這個是固定的,因為引數必須接受Comparator
2.compare這個方法名也是可以省略
3.compare這個方法的返回值和許可權都可以省略
省略固定的程式碼後變成:
//對list集合的資料進行按照年齡排序
Collections.sort(list,
(User o1, User o2)->{
return Integer.compare(o1.age, o2.age);
}
);
還有什麼可以省略得呢?其實(User o1, User o2)的User也可以省略,因為list集合裡存的都是User,JVM是可以猜測的出引數額型別。
省略固定的程式碼後變成:
//對list集合的資料進行按照年齡排序
Collections.sort(list,
( o1, o2)->{
return Integer.compare(o1.age, o2.age);
}
);
還有什麼可以省略得呢?其實return也可以省略,JVM是可以猜測的出返回型別。
省略固定的程式碼後變成:
//對list集合的資料進行按照年齡排序
Collections.sort(list,
( o1, o2)->
Integer.compare(o1.age, o2.age)
);
修改最終變成:
//lambda表示式是:(o1, o2)->(Integer.compare(o1.age, o2.age))。代替複雜內部類
Collections.sort(list, (o1, o2)->(Integer.compare(o1.age, o2.age)) );
lambda表示式的基本語法
lambda表示式的基本語法:引數列表->表示式
引數列表:
1.如果沒有引數,直接用()來表示。//如上需求2的()->System.out.println("HelloWord")
2.如果只有一個引數,並且引數寫了型別,引數外面一定要加()。
3.如果只有一個引數,並且引數不寫型別,那麼這個引數外面可以不用加(。
4.如果有兩個或者多個引數,不管是否寫引數型別,都要加()。//如上需求1
5.如果引數要加修飾符或者標籤,引數一定要加上完整的型別。
表示式:
1.如果表示式只有一行,那麼可以直接寫(不需要{});
2.如果表示式只有多行,需要用{}變成程式碼塊;
3.如果表示式是程式碼塊,並且方法需要返回值,那麼在程式碼塊中就必須返回一個返回值;
4.如果只有單行的情況,並且方法需要返回值,不能有return,編譯器會自動幫我們推導return;
總結:
1.lambda表示式:其實就是按一定語法,省略書寫固定的程式碼,達到簡化程式碼的效果
相關文章
- java8 新特性之Lambda 表示式Java
- Java8 新特性之 Lambda 表示式Java
- Java8新特性(一)-Lambda表示式Java
- Java8新特性(1):Lambda表示式Java
- java8的新特性之lambda表示式和方法引用Java
- java8特性-lambda表示式Java
- Java8新特性第1章(Lambda表示式)Java
- 好程式設計師分享java8新特性之Lambda表示式程式設計師Java
- Java8新特性——從Lambda表示式到Stream流Java
- JDK 1.8 新特性之Lambda表示式JDK
- Java 8新特性(一):Lambda表示式Java
- JDK1.8新特性之Lambda表示式JDK
- JDK1.8新特性之Lambda表示式()->JDK
- jdk1.8 新特性之 lambda表示式JDK
- C++11新特性之Lambda表示式C++
- Java8特性詳解 lambda表示式(一):使用篇Java
- 【譯】java8之lambda表示式Java
- ?Java8新特性之Lambda表示式,函式式介面,方法引用和default關鍵字Java函式
- JDK1.8的新特性之Lambda表示式JDK
- Java8新特性 - LambdaJava
- jdk1.8 新特性之 如何寫lambda表示式JDK
- java8 lambda表示式Java
- 【Java8新特性】Lambda表示式基礎語法,都在這兒了!!Java
- JDK1.8新特性--Lambda表示式JDK
- jdk1.8新特性:Lambda表示式JDK
- .NET3.5新特性,Lambda表示式
- 【java8新特性】蘭姆達表示式Java
- Java8新特性系列-LambdaJava
- Java8新特性系列(Lambda)Java
- Java8特性詳解 lambda表示式(二):流式處理中的lambdaJava
- Java8的Lambda表示式Java
- JDK新特性-Lambda表示式的神操作JDK
- java-反射,介面新特性,Lambda表示式Java反射
- .net framework3.5新特性:Lambda表示式Framework
- Java8特性詳解 lambda表示式(三):原理篇Java
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- Java8中的Lambda表示式Java
- Java8 新語法習慣 (級聯 lambda 表示式)Java