最简单学会Lamda表达式
文章目录
前言–边使用边理解
Lamda表达式不仅简洁还有逼格,代码写起来很有大佬的感觉,但是每次都习惯性躺在舒适区,觉得fori很香。
为了督促自己学会!先从会使用开始,再到深入其概念和原理!
Lamda表达式常用情况
集合下使用
无论是开发还是刷leecode,集合的遍历都是绕不开的!每一次使用集合时候我们用一次Lamda,自然熟记于心!
list
- 第一步
- 第二步
- 第三步
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和{})