Lambda表达式
1.定义
JDK1.8包含1.8之后推出的新特性
简单的说,它没有声明的方法,也就是没有访问修饰词,返回值声明等,
lambda表达式用于穿件内明内部类所属的接口,必须只能有一个抽象方法,否则不可以使用lambda表达式
2.语法规则
(方法参数)->{
方法体
}
Lambda表达式的标准格式,由3部分构成:
(1)一些参数;(2)一个箭头;(3)一段代码
格式:
(参数列表)->{一些重要方法的代码}
解释说明格式:
():接口中抽象方法的参数列表。(如果没有参数空起来就好,如果有参数就写出参数,如果有多个参数就用逗号隔开);
->:传递的意思,把参数传给方法体
{}:重写接口的抽象方法
3.
Test01 t=new Test01(){
public void demo(){
System.out.println("这是匿名内部类实现接口中的方法");
}
});
t.demo();
//利用Lambda表达式实现接口中的方法
Test01 lam=()->{
int a=1;
int b=2;
System.out.println("这是Lambda表达式");
};
lam.demo();
//Lambda有参表达式
/*
* 在接口中的方法列表中可以省略类型
* 如果方法中只有一个参数则可以省略()
*/
Test02 t=a->System.out.println("a的值是:"+a);
t.demo2(9);
Test02_2 t2 = (int age,String name)->System.out.println("我的年龄是:"+age+";我的名字是:"+name);
t2.demo02(18, "张翠花");
4.Lambda表达式
如果有返回值,并且没有方法体时,可以省略return,但是也要省略大括号。
return和{}必须同时有或无
Test03 t=(int a)->{System.out.println("这里是返回值的Lambda");return 9;}
5.Lambda
public static void main(String[] args) {
//匿名内部类
/*Test04 t = new Test04(){
public double demo2(int a ,double b){
return a+b;
}
};
double result = t.demo4(1, 4.1);
System.out.println(result);*/
//Lambda表达式
Test04 t = (a,b)->{System.out.println("Lambda有参也有返回值");return (int) (a+b);};
double result = t.demo4(1, 4.1);
System.out.println(result);
}
6.利用Lambda表达式写线程任务
public static void main(String[] args) {
//匿名内部类
/*Runnable r = new Runnable(){
public void run(){
System.out.println("线程任务");
}
};
Thread t = new Thread();
r.run();*/
//Lambda表达式
Runnable r = ()->System.out.println("线程任务");
r.run();
}
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("李狗蛋");
list.add("翠花");
list.add("王二麻子");
list.add("易烊千玺");
System.out.println(list);
//自定义比较器
/*Comparator<String> c = new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
};
Collections.sort(list,c);
System.out.println("比较后的结果"+list);*/
//Lambda表达式
//方式一
/*Comparator<String> c = (String o1,String o2)->{return o1.length()-o2.length();};
Collections.sort(list,c);
System.out.println("比较后的结果"+list);*/
//方式二
Comparator<String> c1 = (o1,o2)->o1.length()-o2.length();
Collections.sort(list,c1);
System.out.println("比较后的结果"+list);
}
public static void main(String[] args) {
List<Line> list = new ArrayList<Line>();
list.add(new Line(2,4));
list.add(new Line(1,6));
list.add(new Line(4,5));
list.add(new Line(3,1));
System.out.println(list);
Comparator<Line> c = (o1,o2)->{
int a = o1.getX()*o1.getY();
int b = o2.getX()*o2.getY();
return a-b;
};
Collections.sort(list,c);
System.out.println("比较后的结果"+list);
}
在JDK1.7版本以上支持一个方法foreach,List,Map可以使用Lambda表达式进行遍历。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
//遍历以上list集合有几种方式
//方式一 for
/*for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}*/
//方式二 增强for
/*for(String s:list){
System.out.println(s);
}*/
//方式三 迭代器Iterator
/*Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
System.out.println(str);
}*/
//方式四 Lambda表达式list.forEach(Lambda表达式) ()->{}
//list.forEach((s)->System.out.println(s));
Map<String,Double> map = new HashMap<String ,Double>();
map.put("冰箱", 8888.00);
map.put("洗衣机", 2000.00);
map.put("空调", 5999.00);
map.put("电视机", 7888.00);
//遍历Map集合中的key,value
//方式一
/*Set<String> keys = map.keySet();
for(String key:keys){
System.out.println("key值:"+key+",value值"+map.get(key));
}
//方式二
Set<Entry<String,Double>> entry = map.entrySet();
for(Entry<String,Double> e:entry){
System.out.println("key值:"+e.getKey()+",value值"+e.getValue());
}
//此方式必须在JDK1.8以上 才可以使用
//方式三
map.forEach((k,v)->System.out.println(k+":"+v));
*/
}
9.使用Comparator接口实现排序,对集合中的元素排序
public static void main(String[] args) {
List<String> name = new ArrayList<String>();
List<List<String>> list1 = new ArrayList<List<String>>();
list1.add(name);
name.add("Terry");
name.add("Allen");
name.add("Smith");
List<Integer> age = new ArrayList<Integer>();
List<List<Integer>> list2 = new ArrayList<List<Integer>>();
list2.add(age);
age.add(25);
age.add(21);
age.add(23);
List<String> genfer = new ArrayList<String>();
List<List<String>> list3 = new ArrayList<List<String>>();
list3.add(name);
genfer.add("m");
genfer.add("f");
genfer.add("m");
List<Integer> salary = new ArrayList<Integer>();
List<List<Integer>> list4 = new ArrayList<List<Integer>>();
list4.add(age);
salary.add(25);
salary.add(21);
salary.add(23);
System.out.println(name.get(0));
}