JavaSE——Lambda表达式

Posted javaHane

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE——Lambda表达式相关的知识,希望对你有一定的参考价值。

package com.zhao.lambdademo;

public class LambdaDemo1 
    public static void main(String[] args) 
        //正常的匿名内部类写法
        /*Swimming swim=new Swimming() 
            @Override
            public void swim() 
                System.out.println("重写了游泳方法");
            
        ;*/

        //使用lambda表达式简化匿名内部类写法
        Swimming swim=()->
            System.out.println("用lambda表达式重写了游泳方法");
        ;

        //调用go方法
        //go(swim);
        //也可以直接将用lambda表达式简化出的匿名内部类作为对象直接作为参数填入
        go(()->
            System.out.println("用lambda表达式重写了游泳方法");
        );
    

    //写一个go方法运行接口中的swim方法
    public static void go(Swimming s)
        System.out.println("start..");
        s.swim();
        System.out.println("..end");
    


//Lambda表达式只能简化函数式接口的匿名内部类的写法形式
//必须是个接口并有且仅有一个方法的接口叫做函数式接口
//只关注方法实现过程,不需要考虑对象
@FunctionalInterface
interface Swimming
    void swim();

 

 

package com.zhao.lambdademo;

import java.util.Arrays;
import java.util.Comparator;

public class LambdaDemo2 
    //用lambda表达式简化Comparator接口的匿名形式
    public static void main(String[] args) 
        Integer[] arr1=44,2,22,77,55;
        Integer[] arr2=444,22,222,777,555;
        Integer[] arr3=4444,222,2222,7777,5555;


        //正常使用比较器接口的匿名内部类重写sort方法进行降序
        /*Arrays.sort(arr, new Comparator<Integer>() 
            @Override
            public int compare(Integer o1, Integer o2) 
                return o2-o1;
            
        );*/

        //使用lambda表达式简化
        //省略核心:可推导,可省略

        //初级:
        //省略头部
        Arrays.sort(arr1, (Integer o1, Integer o2)-> 
                return o2-o1;
            
        );

        //中级:
        //省略数据类型
        Arrays.sort(arr2, ( o1,  o2)-> 
                    return o2-o1;
                
        );

        //高级
        //省略return关键字与大括号
        Arrays.sort(arr3,(o1, o2) -> o2-o1);

        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        System.out.println(Arrays.toString(arr3));
    

 

 

package com.zhao.lambdademo;

import java.util.Arrays;
import java.util.Comparator;

public class LambdaTest 
    //练习:定义一个数组存储一些字符串,利用Arrays中的sort方法进行排序
    /*要求:
        按照字符串的长度进行排序,短的在前,长的在后。
    */
    public static void main(String[] args) 
        String[] arr="a","aaa","aa","aaaaa","aaaa";

        //利用Comparator接口自定义规则
        /*Arrays.sort(arr, new Comparator<String>() 
            @Override
            public int compare(String o1, String o2) 
                return o1.length()-o2.length();
            
        );*/

        //使用lambda表达式的完整格式
        /*Arrays.sort(arr, new Comparator<String>() 
            @Override
            public int compare(String o1, String o2) 
                return o1.length()-o2.length();
            
        );*/

        //最终简写
        //小括号里的:数据类型可以省略,如果参数只有一个,小括号也可以省略
        //大括号里的:如果方法体只有一行,那么return、分号、大括号都可以省略
        Arrays.sort(arr,(o1, o2)-> o1.length()-o2.length());

        System.out.println(Arrays.toString(arr));
    

 

以上是关于JavaSE——Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE-22.1.6Lambda表达式的注意事项

JavaSE-22.1.7Lambda表达式和匿名内部类的区别

JavaSE-22.1.5Lambda表达式的省略模式

JavaSE | Lambda| Optional| Stream API

JavaSE-22.1.3Lambda表达式练习:有参无返回值抽象方法

JavaSE-22.1.2Lambda表达式练习:无参无返回值抽象方法