A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小鲁哥哥 黑马粉丝团   /  2018-8-17 11:25  /  494 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【济南校区】JDK新特性Lambda表达式

Lambda标准格式
Lambda省去面向对象的条条框框,格式由3个部组成:
一些参数
一个箭头
一段代码
Lambda表达式的标准格式为:
(参数类型  参数名称) ‐> { 代码语句 }
格式说明:
小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔
->是新引入的语法格式,代表指向动作
大括号内的语法与传统方法体要求基本一致
练习:使用Lambda标准格式(无参无返回)
题目
给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值。如下:
[Java] 纯文本查看 复制代码
public interface Cook {

void makeFood();

}
在下面的代码中,请使用Lambda的标准格式调用invokeCook方法,打印输出“吃饭啦!”字样:
[Java] 纯文本查看 复制代码
public class Demo05InvokeCook {

public static void main(String[] args) {

// TODO 请在此使用Lambda【标准格式】调用invokeCook方法

}

 

private static void invokeCook(Cook cook) { cook.makeFood();

}

}
解答
[Java] 纯文本查看 复制代码
public static void main(String[] args) {

invokeCook(() ‐> {

System.out.println("吃饭啦!");

});

}
Lambda的参数和返回值:
下面举例演示java.util.Comparator<T>接口的使用场景代码,其中的抽象方法定义为:
public abstract int compare(T o1, T o2);
当需要对一个对象数组进行排序时, Arrays.sort方法需要一个Comparator接口实例来指定排序的规则。假设有一个Person类,含有String name和int age两个变量。
[Java] 纯文本查看 复制代码
public class Person {

private String name;

private int age;

 

// 省略构造器、toString方法与Getter Setter

}
传统写法:
[Java] 纯文本查看 复制代码
import java.util.Arrays; import java.util.Comparator;

 

public class Demo06Comparator {

public static void main(String[] args) {

// 本来年龄乱序的对象数组

Person[] array = {

new Person("古力娜扎", 19),

new Person("迪丽热巴", 18), new Person("马尔扎哈", 20) };

 

// 匿名内部类

Comparator<Person> comp = new Comparator<Person>() {

@Override

public int compare(Person o1, Person o2) { return o1.getAge() ‐ o2.getAge();

}

};

Arrays.sort(array, comp); // 第二个参数为排序规则,即Comparator接口实例

 

for (Person person : array) { System.out.println(person);

}

}

}
Lambda写法:
[Java] 纯文本查看 复制代码
import java.util.Arrays;

 

public class Demo07ComparatorLambda { public static void main(String[] args) {

Person[] array = {

new Person("古力娜扎", 19),

new Person("迪丽热巴", 18), new Person("马尔扎哈", 20) };

Arrays.sort(array, (Person a, Person b) ‐> {

return a.getAge() ‐ b.getAge();

});

 

for (Person person : array) { System.out.println(person);

}

}

}

如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
     黑马程序员济南中心联系电话:0531-55696830




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马