深圳樂安居網(wǎng)站誰做的北京網(wǎng)站推廣營銷服務電話
一、介紹
1、簡介
Java的Lambda表達式是Java?8引入的一個特性,它支持函數(shù)式編程,允許將函數(shù)作為方法的參數(shù)或返回值,從而簡化了匿名內(nèi)部類的使用,并提供了對并行編程的更好支持。
2、語法
Lambda表達式的使用前提是存在一個接口,該接口中有且只有一個抽象方法。在主方法中可以通過創(chuàng)建接口的匿名內(nèi)部類或使用Lambda表達式來調(diào)用該接口的方法。
Lambda表達式的語法為(parameter_list) -> {function_body}
,其中->
將參數(shù)和實現(xiàn)邏輯分離,()
中的部分是需要傳入Lambda體中的參數(shù),{}
中的部分接收來自()
中的參數(shù),并完成一定的功能。
3、優(yōu)點
Lambda表達式的主要優(yōu)勢包括:
- 簡化匿名內(nèi)部類的使用,使代碼更加簡潔明了。
- 支持函數(shù)式編程,允許函數(shù)作為第一類對象進行傳遞和操作。
- 促進并行編程,因為函數(shù)式編程中的純函數(shù)天然具備無副作用的特性,使得在并行編程中更容易實現(xiàn)可靠的多線程和并行處理。
4、用途
Lambda表達式主要用于函數(shù)式接口,即只包含一個抽象方法的接口,可以使用@FunctionalInterface
注解進行標識。常用場景有:
- 創(chuàng)建Runnable實例:
Runnable runnable = () -> {System.out.println("Hello, Lambda!");};
- 實現(xiàn)Consumer接口:
numbers.forEach(n -> System.out.println(n));
- 實現(xiàn)Predicate接口:
filteredNames = names.stream().filter(name -> name.length() > 5).collect(Collectors.toList());
- 創(chuàng)建線程:
new Thread(() -> System.out.println("haha")).start();
二、使用場景
1、集合遍歷
List<String> stringList = Arrays.asList("apppe","organge","banana");// 原來的方式for (String s : stringList) {System.out.println(s);}// lambda 表達式stringList.forEach(s->{System.out.println(s);});
2、排序
注意:-1:代表第一個對象,1:代表第二個對象?
List<Dog> dogs = Arrays.asList(new Dog[]{new Dog("n1", 12),new Dog("n2", 14),new Dog("n3", 11)});// 方法1Collections.sort(dogs, new Comparator<Dog>() {@Overridepublic int compare(Dog o1, Dog o2) {return o1.getAge()>o2.getAge()?-1:1;}});// 方法2Collections.sort(dogs,(o1,o2)->(o1.getAge()>o2.getAge()?-1:1));dogs.forEach(s->{System.out.println(s.getAge());});
3、過濾
List<String> stringList = Arrays.asList("apple","organge","banana");// 獲取集合中所有以“a”開頭的字符串// 原來的方式List<String> newList = new ArrayList<String>();for (String s : stringList) {if(s.startsWith("a")){newList.add(s);}}// lambda表達式List<String> newList2 = stringList.stream().filter(s -> {if(s.startsWith("a")){return true;}return false;}).collect(Collectors.toList());
4、映射
List<String> stringList = Arrays.asList("apple","organge","banana");// 獲取集合中所有字符串的長度// 原來的方式List<Integer> newList = new ArrayList<Integer>();for (String s : stringList) {newList.add(s.length());}// lambda表達式List<Integer> newList2 = stringList.stream().map(s -> {return s.length();}).collect(Collectors.toList());// lambda 表達式newList2.forEach(s->{System.out.println(s);});