当前位置 博文首页 > 盛夏温暖流年:Lambda表达式使用整理总结

    盛夏温暖流年:Lambda表达式使用整理总结

    作者:[db:作者] 时间:2021-07-13 19:06

    Lambda 表达式的基础语法 : Java8 中引入了一个新的操作符 “->”, 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分 :

    左侧 : Lambda 表达式的参数列表;

    右侧 : Lambda 表达式中所需执行的功能, 即 Lambda 体;

    基本语法:

    (parameters) -> expression

    (parameters) -> { statements; }

    常用示例:

    1.forEach遍历List集合

    String[] names = {"喵","汪","咩"};  
    List<String> nameList =  Arrays.asList(names);  
      
    // 旧的循环方式  
    for (String name : nameList) {  
         System.out.print(name + "; ");  
    }  
      
    // 使用 lambda 表达式
    nameList.forEach((item) -> System.out.print(item + " ")); 
    

    2.Stream用法

    (1).filter过滤

    List<User> users = users.stream()
    				.filter(user -> "小喵咪".equals(user.getName()))
    				.collect(Collectors.toList());
    

    (2).map处理

    List nums = Arrays.asList(100, 200, 300, 400, 500);
    for (Integer num : nums) {
          num = num + 12;
          System.out.println(num);
    }
    // 使用 lambda 表达式
    List nums = Arrays.asList(100, 200, 300, 400, 500);
    nums.stream().map((num) -> num = num + 12)
                          .forEach(System.out::println);
    

    3.使用Lambda排序集合

    String[] names = {"喵","汪","咩"};   
       
    // 使用匿名内部类排序
    Arrays.sort(names, new Comparator<String>() {  
        @Override  
        public int compare(String s1, String s2) {  
            return (s1.compareTo(s2));  
        }  
    });
    // 使用lambda表达式
    Arrays.sort(names, (String s1, String s2) -> (s1.compareTo(s2))); 
    

    4.返回不同类型的处理结果

    //返回String
    String str = userList.stream()
    		.filter(user -> "喵".equals(user.getName()))
            .collect(Collectors.joining(","));
    
    //返回Set
    Set<String> names = userList.stream()  
              .filter(user -> "喵".equals(user.getName()))
              .collect(Collectors.toSet());
     
    //返回TreeSet
    TreeSet<String> names = userList.stream()  
              .filter(user -> "喵".equals(user.getName()))
              .collect(Collectors.toCollection(TreeSet::new));  
    

    5.实现多线程接口

    //使用Thread匿名内部类  
    new Thread(new Runnable() {  
        @Override  
        public void run() {  
            System.out.println("Hello world!");  
        }  
    }).start();  
      
    //使用lambda表达式
    new Thread(() -> System.out.println("Hello world!")).start();  
      
      
      
    //使用Runnable匿名内部类  
    Runnable race1 = new Runnable() {  
        @Override  
        public void run() {  
            System.out.println("Hello world!");  
        }  
    };  
      
    //使用lambda表达式
    Runnable race2 = () -> System.out.println("Hello world!");
    

    注意事项:

    1.lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义);

    2.在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。

    cs
    下一篇:没有了