java8新特性之lambda表达式(一)
来源:互联网 发布:有网络登陆不了微信 编辑:程序博客网 时间:2024/05/16 02:02
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表达式:其实就是按一定语法,省略书写固定的代码,达到简化代码的效果
1 0
- java8新特性之lambda表达式(一)
- java8 新特性之Lambda表达式(一)
- java8新特性之lambda表达式(二)
- Java8新特性之lambda表达式
- Java8新特性之(lambda表达式)
- Java8新特性之lambda表达式
- java8新特性之lambda表达式
- java8新特性Lambda表达式
- java8新特性--lambda表达式
- Java8新特性 - lambda表达式
- java8新特性-lambda表达式
- java8新特性lambda表达式
- Java8新特性Lambda表达式
- Java8新特性Lambda表达式
- Java8新特性 lambda表达式
- Java8 新特性Lambda表达式
- Java8新特性--Lambda表达式
- java8 新特性-Lambda 表达式
- AndroidUiAutomator使用Jenkins搭建持续集成测试系统Ⅰ—Android UiAutomator以及快速编译方法
- 高级加密标准
- 大文件分片上传和断点续传
- Maven使用入门(二)
- makefile编写(最终整理完整版)
- java8新特性之lambda表达式(一)
- C语言系列(五)内存的分配与释放
- CentOS安装epel包
- 飞思卡尔低成本车规等级360度环视解决方案
- android 自定义view学习笔记————Paint和Canvas的简单使用
- 选择有2条以上记录的个人顺序号和它的记录行数
- TYZ 8/23 原根
- mysql中如何建立主外键关系
- AOE网上的关键路径