avatar

Lambda表达式常见应用场景

一、集合中的使用

  • 集合的遍历
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 初始化集合
    List<User> users = new ArrayList<>();
    users.add(new User("詹姆士",22,"男"));
    users.add(new User("露西",21,"女"));
    users.add(new User("弗兰克",25,"男"));
    users.add(new User("爱丽丝",27,"女"));
    users.add(new User("路易斯",22,"男"));

    // 遍历集合 Lambda
    users.stream().forEach(user -> System.out.println(user));
    // 遍历集合 方法引用
    users.stream().forEach(System.out::println);

    方法引用(::双冒号操作符)

    1. 其实就是一种Lambda表达式的简写方式,它提供了一种引用而不执行方法的方式,运行时,方法引用会创建一个函数式接口的实例。

    2. 方法引用的五种方式:

      —- —-
      引用对象的实例方法 对象::实例方法名
      引用类的静态方法 类::静态方法名
      引用类的实例方法 类::实例方法名
      引用构造方法 类::new
      数组引用 类型::new
  • List转Map
    1
    2
    // 这里的toMap有三个参数,第一个取的名称为 key,第二个参数 表示整个user对象为一个 value,最后一个参数可以不加,它的作用是如果 key 值有重复的,如何处理
    Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getName, a -> a, (k1, k2) -> k1));
  • 将List分组
    1
    2
    // 根据性别进行分类
    Map<String, List<User>> groupBy = users.stream().collect(Collectors.groupingBy(User::getSex));
  • 集合过滤
    1
    2
    // 过滤出男性
    List<User> filterList = users.stream().filter(user -> user.getSex().equals("男")).collect(Collectors.toList());
  • 集合求和
    1
    2
    // 年龄和
    int sum = users.stream().mapToInt(User::getAge).sum();

二、代替Runnable

1
2
3
4
5
6
// 利用Lambda实现Runnable里的run方法
Runnable r = () -> {
System.out.println(Thread.currentThread().getName());
} ;
Thread thread = new Thread(r);
thread.start();

三、Predicate条件过滤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6);
filter(numbers,number -> {
return (int)number > 2;
});
}

/**
* 过滤方法
* @param list
* @param condition
*/
public static void filter(List list, Predicate condition){

list.forEach(number -> {
if (condition.test(number)){
System.out.println(number);
}
});
}

四、Map映射

1
2
// 将返回一个将每个数字都×2的新List
List<Integer> mapList = numbers.stream().map(number -> number * 2).collect(Collectors.toList());

五、Reduce聚合

1
2
// 返回所有成员的和
Integer sum = numbers.stream().reduce((x, y) -> x + y).get();
文章作者: Frosro
文章链接: https://frosro.github.io/2020/04/19/Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%B8%B8%E8%A7%81%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BETTER LATE THAN NEVER
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论