Lambda表达式的理解

Lambda表达式是Java8添加的一个新的特性,说白了Lambda表达式就是一个匿名函数
使用Lambda表达式可以对一个接口进行非常简洁的实现

接口的准备

1、无参无返回值的接口

/**无参无返回值的接口*/
@FunctionalInterface
public interface LambdaNNParamter {
    void test() ;
}

2、无参有返回值的接口

/**无参有返回值的接口*/
@FunctionalInterface
public interface LambdaNMParamter {
    int test();
}

3、有参有返回值的接口

/**有参有返回值的接口*/
@FunctionalInterface
public interface LambdaMMParamter {
    int test(int a);
}

lambda表达式语法

		//lambda是一个匿名函数
        //()表示参数
        //{}表示方法体
        // -> 表示lambda运算符


        /**无参无返回值*/
        LambdaNNParamter lambda1 = () -> System.out.println("hello word");
        lambda1.test();

        /**无参有返回值*/
        LambdaNMParamter lambda2 = () -> 1;
        System.out.println(lambda2.test());

        /**有参有返回值*/
        LambdaMMParamter lambda3 = a -> a*2;
        System.out.println(lambda3.test(10));

方法的引用

		//方法引用:
        //可以快速的将一个Lambda表达式的实现指向一个已经实现的方法
        //方法隶属者::方法名

        /**引用*/
        LambdaMMParamter lambda4 = LambdaTest::change;
        System.out.println(lambda4.test(10));
public class LambdaTest {

    public static void main(String[] arg){

        /**引用*/
        LambdaMMParamter lambda4 = LambdaTest::change;
        System.out.println(lambda4.test(10));

    }

    private static int change(int a){
        return a*3;
    }


}

构造方法的引用

定义一个类

public class Person {
    public int age;
    public String name;
    /**无参构造方法*/
    public Person(){
        System.out.println("我是无参构造方法");
    }
    /**有参构造方法*/
    public Person(String name,int age){
        this.age = age;
        this.name = name;
        System.out.println("我是有参构造方法");
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

测试类

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

        PersonCreater creater =() ->  new Person();
        creater.getPerson();

        //构造方法的引用
        PersonCreater creater1 = Person::new;
        creater.getPerson();

        PersonCreater2 creater2 = Person::new;
        creater2.getPerson("小米",11);
    }
}

interface PersonCreater{
    Person getPerson();
}

interface PersonCreater2{
    Person getPerson(String name,int age);
}

结果:
在这里插入图片描述
lambda表达式ArrayList集合排序

public class Exersice1 {
    //集合排序
    /**ArrayList<>*/
    public static void main(String[] args) {
        /**
         * 需求:
         * 已知在ArryList中有若干个Person类对象,将这些Person对象按照年龄来降序排序
         */

        List<Person> list = new ArrayList<>();

        list.add(new Person("小蓝",10));
        list.add(new Person("小红",11));
        list.add(new Person("小紫",10));
        list.add(new Person("小橙",20));

        //排序
        list.sort((o1,o2) -> o2.age - o1.age);

        System.out.println(list);
    }
}

结果:
在这里插入图片描述
lambda表达式TreeSet排序

public class Exersice2 {

    public static void main(String[] args) {
        //TreeSet排序
        //使用Lambda表达式来实现Comparator接口,并实例化一个TreeSet对象
        TreeSet<Person> set = new TreeSet<>((o1,o2) -> {
            if(o1.age >= o2.age){
                return -1;
            }else {
                return 1;
            }
        });

        set.add(new Person("小蓝",10));
        set.add(new Person("小红",11));
        set.add(new Person("小紫",10));
        set.add(new Person("小橙",20));

        System.out.println(set);

    }
}

结果:
在这里插入图片描述
lambda表达式ForEach

public class Exersice3 {
    public static void main(String[] args) {
        //集合的遍历
        ArrayList<Integer> list = new ArrayList<>();
        //添加元素
        Collections.addAll(list,1,2,3,4,5,6,7,8,9);

        for (Integer integer : list) {
            System.out.println(integer);
        }
        //将集合中的每一个元素带入到方法accept中
        list.forEach(System.out::println);

        //输出集合中的偶数
        list.forEach(elm -> {
            if(elm %2 == 0){
                System.out.println(elm);
            }
        });
    }
}

lambda使用removeif

public class Exersice4 {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();

        list.add(new Person("小蓝",10));
        list.add(new Person("小红",11));
        list.add(new Person("小紫",10));
        list.add(new Person("小橙",20));

        //删除年龄大于10岁的元素  使用迭代器删除
        ListIterator<Person> it = list.listIterator();
        while (it.hasNext()){
            Person person = it.next();
            if (person.age > 10){
                it.remove();
            }
        }
        
        //使用lambda实现
        //将集合中的每一个元素都带入到test方法中,如果返回值是true将删除
        list.removeIf(t -> {
            if (t.age > 10){
                return true;
            }else {
                return false;
            }
        });
		
		//简化
        list.removeIf(t -> t.age>10);

        System.out.println(list);
    }
}

lambda表达式开辟一个线程,做一个输出

public class Exersice5 {
    public static void main(String[] args) {
        //使用lambda表达式开辟一个线程,做一个数字的输出
        Thread t = new Thread(() -> {
            for (int i =0; i<100; i++){
                System.out.println(i);
            }
        });
        t.start();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值