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

最简单学会Lamda表达式

文章目录

  • 最简单学会Lamda表达式
    • 前言--边使用边理解
    • Lamda表达式常用情况
      • 集合下使用
        • list
        • HashMap实战
        • 完整代码
      • Array下使用
      • Comparator
      • Thread
      • Runnable
      • Callable
    • 概念

前言–边使用边理解

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

Lamda表达式常用情况

集合下使用

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

list

  1. 第一步最简单学会Lamda表达式--一看就会_第1张图片
  2. 第二步
    最简单学会Lamda表达式--一看就会_第2张图片
  3. 第三步
    最简单学会Lamda表达式--一看就会_第3张图片

HashMap实战

注意事项
最简单学会Lamda表达式--一看就会_第4张图片
成功运行
最简单学会Lamda表达式--一看就会_第5张图片

完整代码

    public static void main(String[] args) {
	// write your code here
        ArrayList list=new ArrayList<>();
        HashSet set=new HashSet<>();
        HashMap 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);
        });
    }

最简单学会Lamda表达式--一看就会_第6张图片

Comparator

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

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

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


List 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();
    }

最简单学会Lamda表达式--一看就会_第7张图片

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");
        }
    }

最简单学会Lamda表达式--一看就会_第8张图片

Callable

Callable接口的Lambda表达式示例:

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

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

概念

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

最简单学会Lamda表达式--一看就会_第9张图片

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

你可能感兴趣的:(java,lambda)