最简单学会Lamda表达式--一看就会

最简单学会Lamda表达式

前言–边使用边理解

Lamda表达式不仅简洁还有逼格,代码写起来很有大佬的感觉,但是每次都习惯性躺在舒适区,觉得fori很香。
为了督促自己学会!先从会使用开始,再到深入其概念和原理

Lamda表达式常用情况

集合下使用

无论是开发还是刷leecode,集合的遍历都是绕不开的!每一次使用集合时候我们用一次Lamda,自然熟记于心!

list
  1. 第一步在这里插入图片描述
  2. 第二步
    在这里插入图片描述
  3. 第三步
    在这里插入图片描述
HashMap实战

注意事项
在这里插入图片描述
成功运行
在这里插入图片描述

完整代码
    public static void main(String[] args) {
	// write your code here
        ArrayList<Integer> list=new ArrayList<>();
        HashSet<Integer> set=new HashSet<>();
        HashMap<Integer,Integer> map=new HashMap<>();
        for (int i = 0; i < 10; i++) {
            list.add(i*10);
            map.put(i,i*10);
        }
        //lamda 遍历 list
        list.forEach( (u)->{
           System.out.println(u);
        });
        //lamda 遍历 hashMap
        //int count =0;
        Integer[] count1={0};
        AtomicInteger count2= new AtomicInteger();
        map.forEach((k,v)->{
            if(v>20){
                //count++;  // 不可以在Lambda表达式中修改外部变量,否则会提示Variable used in lambda 
                count1[0]++;
                count2.getAndIncrement();
            }
        });
        System.out.println("count1[0]:  "+count1[0]);
        System.out.println("count2.get():  "+count2.get());
    }
}

Array下使用

    public static void main(String[] args) {
	    // write your code here
        Integer[] array=new Integer[10];
        for (int i = 0; i < 10; i++) {
            array[i]=i*10;
        }
        Arrays.asList(array).forEach((item)->{
            System.out.println("array: "+item);
        });
    }

在这里插入图片描述

Comparator

Comparator实现类:(1)需要声明泛型;(2)需要实现compare方法,且参数列表有两个,参数类型与泛型类上声明一致

Comparator<Integer> comparator = (o1, o2) -> o1.compareTo(o2);

List<Integer> numbers = Lists.newArrayList(1, 2, 3);
numbers.sort((x1, x2) ->  x2.compareTo(x1));
numbers.forEach((x) -> {
    System.out.println(x);
});


List<User> users = Lists.newArrayList(new User(18), new User(22), new User(24));
users.sort((u1, u2) -> u2.age.compareTo(u1.age));
users.forEach((u) -> {
    System.out.println(u.age);
});

Thread

Thread thread = new Thread(() -> {
    System.out.println("HelloWorld");
});
thread.start();
    public static void main(String[] args) {
	    new Thread(()->{
            for (int i = 0; i < 10; i++) {
                System.out.println("i am thread  "+i);
            }
        }).start();
    }

在这里插入图片描述

Runnable

Runnable接口源码

    public static void main(String[] args) {
	    // write your code here
        Runnable runnable=()->{
            while (true){
                System.out.println("I am runable");
            }
        };
        new Thread(runnable).start();
        while (true){
            System.out.println("I am main");
        }
    }

在这里插入图片描述

Callable

Callable接口的Lambda表达式示例:

Callable<String> callable = () -> {
    return "HelloWorld";
};

Callable接口有返回值,Lambda主体可以直接使用表达式替代return语句,如下:
Callable<String> callable = () -> "HelloWorld";

概念

参数列表:函数参数列表
箭头:分割参数列表和主体
Lambda主体:函数主体(Note:如果是多行,需要加**{}**)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

参数列表
参数列表使用括号(x1,…)来表示,其中参数可以声明参数类型,也可以不声明参数类型(编译器会根据上下文推断)
函数体(Lambda主体)
Lambda表达式的函数体,既可以是代码块,也可以是表达式。
代码块:和普通方法的方法主体一致;
表达式:表达式会被执行并返回结果,其本质上是一种return语句的简写(省略了return和{})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值