Java:数据结构-Lambda表达式
Lambda表达式
lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
Lambda表达式的基本语法:
(parameters) -> expression 或 (parameters) ->{ statements; }
函数式接口
定义:如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
interface NoParameterNoReturn {//注意:只能有一个抽象方法void test();}
因为还是一个抽象方法,所以这个也是可以的
interface NoParameterNoReturn {void test();default void test2() {System.out.println("--------");}}
Lambda表达式的基本使用
1.无返回值无参数
//无返回值无参数
@FunctionalInterface
interface NoParameterNoReturn {void test();
}
public class lambdaTest {public static void main(String[] args) {NoParameterNoReturn noParameterNoReturn=new NoParameterNoReturn() {@Overridepublic void test() {System.out.println("重写test方法");}};System.out.println("------------");NoParameterNoReturn noParameterNoReturn1=()-> System.out.println("重写test方法");noParameterNoReturn1.test();}
2.无返回值一个参数
//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {void test(int a);
}
public class lambdaTest {public static void main(String[] args) {OneParameterNoReturn oneParameterNoReturn=new OneParameterNoReturn() {@Overridepublic void test(int a) {System.out.println(a);}};//OneParameterNoReturn oneParameterNoReturn1=(int a)-> System.out.println(a);OneParameterNoReturn oneParameterNoReturn1=a-> System.out.println(a);oneParameterNoReturn1.test(15);}
3.无返回值多个参数
//无返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {void test(int a,int b);
}
public class lambdaTest {public static void main(String[] args) {MoreParameterNoReturn moreParameterNoReturn=new MoreParameterNoReturn() {@Overridepublic void test(int a, int b) {System.out.println(a+b);}};//MoreParameterNoReturn moreParameterNoReturn1=(int a,int b)-> {System.out.println(a+b);};MoreParameterNoReturn moreParameterNoReturn1=(a,b)-> System.out.println(a+b);moreParameterNoReturn1.test(5,4);}
4.有返回值无参数
//有返回值无参数
@FunctionalInterface
interface NoParameterReturn {int test();
}
public class lambdaTest {public static void main(String[] args) {NoParameterReturn noParameterReturn=new NoParameterReturn() {@Overridepublic int test() {return 0;}};//NoParameterReturn noParameterReturn1=()->{return 10;};NoParameterReturn noParameterReturn1=()->10;System.out.println(noParameterReturn1.test());}
5.有返回值一个参数
//有返回值一个参数
@FunctionalInterface
interface OneParameterReturn {int test(int a);
}
public class lambdaTest {public static void main(String[] args) {OneParameterReturn oneParameterReturn=new OneParameterReturn() {@Overridepublic int test(int a) {return 0;}};//OneParameterReturn oneParameterReturn1=(int a)->{return a;};OneParameterReturn oneParameterReturn1=(a)->a;System.out.println(oneParameterReturn.test(10));}
6.有返回值多参数
//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {int test(int a,int b);
}
public class lambdaTest {public static void main(String[] args) {MoreParameterReturn moreParameterReturn=new MoreParameterReturn() {@Overridepublic int test(int a, int b) {return a+b;}};//MoreParameterReturn moreParameterReturn1=(int a,int b)->{return a/b;};MoreParameterReturn moreParameterReturn1=(a,b)->a/b;System.out.println(moreParameterReturn1.test(15, 5));}
Lambda在集合当中的使用
对应的接口 | 新增的方法 |
Collection | removeIf() spliterator() stream() parallelStream() forEach() |
List | replaceAll() sort() |
Map | getOrDefault() forEach() replaceAll() putIfAbsent() remove() replace() computeIfAbsent() computeIfPresent() compute() merge() |
List接口
public class lambdaTest {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("abcd");list.add("zko");list.add("hello");list.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});System.out.println("=========");list.forEach(s -> System.out.println(s));System.out.println("=====排序====");/*list.sort(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});*/list.sort((o1,o2) -> o1.compareTo(o2));list.forEach(s -> System.out.println(s));}
Map接口
public class lambdaTest {public static void main(String[] args) {HashMap<String,Integer> map = new HashMap<>();map.put("hello",3);map.put("abc",5);map.put("def",2);/*map.forEach(new BiConsumer<String, Integer>() {@Overridepublic void accept(String s, Integer integer) {System.out.println("key: "+s +" val: "+integer);}});*/map.forEach((key,val)->System.out.println("key: "+key +" val: "+val));}
希望能对大家有所帮助!!!!