• Lambda表达式


    lambda表达式

    lambda可以让java以函数式编程.

    该特性是自JDK8之后推出的.

    使用lambda可以方便快捷创建匿名内部类。

    语法:

    (参数列表)->{

            方法体

    }

    使用lambda创建的匿名内部类实际所属的接口必须只能有一个方法.否则编译不通过.

    lambda表达式第一种    无参数的写法

    1. public class LambdaDemo1 {
    2. public static void main(String[] args) {
    3. //例如原先需要创建线程任务
    4. Runnable r1=new Runnable() {
    5. @Override
    6. public void run() {
    7. System.out.println("hello");
    8. }
    9. };
    10. //现在可以这样 lambda表达式是编译器认可 JVM虚拟机不认可,也就是说编译器在编译时候给你加上去了
    11. Runnable r2=()->{
    12. System.out.println("hello");
    13. };
    14. //如果你的方法体里只有一句代码 还可以简化 连{}也可以不用写
    15. Runnable r3=()->System.out.println("hello");
    16. ;
    17. }
    18. }

    lambda表达式第二种  有参数的写法

    1. public class LambdaDemo2 {
    2. public static void main(String[] args) {
    3. List<String> list=new ArrayList<>();
    4. list.add("传奇");
    5. list.add("小泽老师");
    6. list.add("苍老师");
    7. System.out.println(list);
    8. //自然排序 要求集合内元素实现Comparable接口 对代码具有侵入性
    9. //Collections.sort(list);
    10. //建议定义比较器的方式进行排序 普通写法
    11. // Comparator<String> com=new Comparator<String>() {
    12. // @Override
    13. // public int compare(String o1, String o2) {
    14. // return 0;
    15. // }
    16. // };
    17. //不需要写参数类型
    18. Comparator<String> com=(o1,o2)->{
    19. return o1.length()-o2.length();
    20. };
    21. //因为里面就一句话,因此{}也不需要写 但是注意:这里是return 有返回值的,如果不写{} 请把return也去掉
    22. Comparator<String> com2=(o1,o2)-> o1.length()-o2.length();
    23. // Collections.sort(list, new Comparator<String>() {
    24. // @Override
    25. // public int compare(String o1, String o2) {
    26. // return 0;
    27. // }
    28. // });
    29. //那么可以这么写
    30. Collections.sort(list,(o1,o2)->o1.length()-o2.length() );
    31. }
    32. }

    Lambda表达式的经典用法:集合遍历

    JDK8之后集合和Map都支持了一个新的方法:

    foreach,可以使用lambda遍历集合元素.

    由于该方法是集合自行提供的,那么在使用一个线程安全的集合或Map时,

    该种遍历方式也是并发安全的(原迭代器模式不与集合方法互斥,并发需要自行维护)

    1. public class LambdaDemo3 {
    2. public static void main(String[] args) {
    3. List<String> list=new ArrayList<>();
    4. list.add("one");
    5. list.add("two");
    6. list.add("three");
    7. list.add("four");
    8. for(String str:list){
    9. System.out.println(str);
    10. }
    11. //JDK8支持的新方式
    12. list.forEach((item)-> System.out.println(item));
    13. Map<String,Integer> map=new HashMap<>();
    14. map.put("语文", 99);
    15. map.put("数学", 98);
    16. map.put("英语", 97);
    17. //遍历map时候是两个参数 分别是keyvalue
    18. map.forEach((a,b)-> System.out.println(a+":"+b));
    19. }
    20. }

  • 相关阅读:
    骑士精神 ← IDA*
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    Linux—— ansible循环
    Python 判断回文数
    解释区块链技术的应用场景和优势
    linux安装切换图形化界面?
    一文读懂 C++ 并发与多线程 独家原创
    YOLO目标检测——红火蚂蚁识别数据集+已标注yolo格式标签下载分享
    【giszz笔记】产品设计标准流程【5】
    Bigkey问题的解决思路与方式探索
  • 原文地址:https://blog.csdn.net/tiantiantbtb/article/details/133930541