Lambda表达式⭐️项目中的常见使用方式,通过具体案例总结Lambda的常用写法

目录

前言

一、Lambda简介

二、常见与Stream处理流的区别

[三、 具体场景使用方式](#三、 具体场景使用方式)

章末


前言

小伙伴们大家好,项目中使用Lambda表达式的地方有很多,而且确实很简洁,来总结下项目中遇到的常用方法,先来看下简介

一、Lambda简介

Lambda表达式:Lambda表达式是一种轻量级的匿名函数,它可以用于替代繁琐的匿名内部类。Lambda表达式可以作为参数传递给方法或函数式接口,并且可以简洁地表示一个功能。Lambda表达式使用箭头(->)将参数列表与函数体分开。

二、常见与Stream处理流的区别

  • Lambda表达式可以在Stream流的操作方法中使用,例如filter、map等。Lambda表达式作为参数传递给这些方法,定义了对流中元素的处理逻辑。

  • Stream流提供了一种简洁而强大的方式来处理集合数据,利用Lambda表达式可以方便地对流中的元素进行转换、过滤、排序等操作。

  • 使用Lambda表达式和Stream流可以实现函数式编程的特性,例如将数据处理过程抽象化、实现链式调用等。

三、 具体场景使用方式

只挑常用的,没涉及到的方法还请自行查询使用

  1. 场景:在一个电商网站中,需要根据用户的购物车内容计算出订单总金额,并且只计算价格大于100的商品。

可以结合使用Stream API和lambda表达式计算订单总金额

java 复制代码
List<Double> cartItems = Arrays.asList(50.0, 150.0, 200.0, 80.0);
double totalAmount = cartItems.stream()
                              .filter(item -> item > 100)
                              .mapToDouble(item -> item)
                              .sum();
System.out.println("订单总金额(价格大于100):" + totalAmount);
  1. 场景:在一个学生管理系统中,需要根据学生的成绩对学生列表进行排名,并且只考虑成绩在前10%的学生。

可以结合使用lambda表达式和Comparator接口对学生列表按照成绩进行排名

java 复制代码
List<Student> students = getStudents(); // 比拟获取学生列表
int topPercentage = (int) (students.size() * 0.1); // 前10%的学生数量
List<Student> rankedStudents = students.stream()
                                       .sorted(Comparator.comparing(Student::getScore).reversed())
                                       .limit(topPercentage)
                                       .collect(Collectors.toList());
System.out.println("按照成绩排名(只考虑前10%)后的学生列表:" + rankedStudents);
  1. 场景:在一个音乐播放器应用中,需要根据用户的喜好对歌曲列表进行过滤和排序,并且只保留前5首最热门的歌曲。

结合使用lambda表达式和Predicate接口对歌曲列表进行根据用户喜好的过滤和排序。

java 复制代码
List<Song> songs = getSongs(); // 比拟获取歌曲列表
String userPreference = "pop"; // 用户喜好
List<Song> filteredSongs = songs.stream()
                                .filter(song -> song.getGenre().equals(userPreference))
                                .sorted(Comparator.comparing(Song::getDownloads).reversed())
                                .limit(5)
                                .collect(Collectors.toList());
System.out.println("根据用户喜好过滤和排序(只保留前5首)后的歌曲列表:" + filteredSongs);
  1. 场景:在一个任务调度系统中,需要按照任务的优先级和截止日期对任务队列进行排序和分配,并且只处理前50个任务。
java 复制代码
List<Task> tasks = getTasks(); // 获取任务队列
List<Task> sortedAndAssignedTasks = tasks.stream()
//先根据优先级排序,再比较截止时间
                                         .sorted(Comparator.comparing(Task::getPriority)
                                                          .thenComparing(Task::getDeadline))
                                         .limit(50)
//模拟分发任务
                                         .map(task -> assignTaskToWorker(task))
                                         .collect(Collectors.toList());
System.out.println("按照优先级和截止日期排序并分配(只处理前50个任务)后的任务列表:" + sortedAndAssignedTasks);
  1. 场景:在一个博客网站中,需要根据博客的发布时间和点击量对博客列表进行排序展示,并且只展示最近一周内的博客。
java 复制代码
List<BlogPost> blogPosts = getBlogPosts(); // 获取博客列表
LocalDate oneWeekAgo = LocalDate.now().minusWeeks(1); // 一周前的日期
List<BlogPost> sortedBlogPosts = blogPosts.stream()
        //先过滤掉不符合日期的
        .filter(blogPost -> blogPost.getPublishDate().isAfter(oneWeekAgo))                            
        //先根据发布时间排序,再根据点击量排序(倒排)
        .sorted(Comparator.comparing(BlogPost::getPublishTime)
        .thenComparing(BlogPost::getClicks).reversed())
        .collect(Collectors.toList());
System.out.println("按照发布时间和点击量排序展示(只展示最近一周内的博客)的博客列表:" + sortedBlogPosts);
  1. 除了和stream结合使用,Lambda还有一些常见使用方式

2.1 作为参数传递给方法:Lambda表达式可以作为方法或函数式接口的参数传递给方法。

java 复制代码
List<String> list = Arrays.asList("John", "Mary", "Peter");
list.forEach(name -> System.out.println(name)); // 使用Lambda表达式遍历List元素

2.2 作为返回值:Lambda表达式可以作为方法或函数式接口的返回值。

java 复制代码
Function<Integer, Integer> addOne = x -> x + 1; // 返回一个Function接口实例
int result = addOne.apply(5); // 调用Function接口的apply方法,返回6

2.3 作为线程任务:Lambda表达式可以作为线程任务传递给Thread或ExecutorService等线程相关的类。

java 复制代码
Thread t = new Thread(() -> {
    // 线程任务逻辑
});
t.start();

章末

文章到这里就结束了,后面用到的还会继续补充

相关推荐
萝卜白菜。13 分钟前
TongWeb7.0相同的类指明加载顺序
开发语言·python·pycharm
wb0430720113 分钟前
使用 Java 开发 MCP 服务并发布到 Maven 中央仓库完整指南
java·开发语言·spring boot·ai·maven
Rsun0455115 分钟前
设计模式应该怎么学
java·开发语言·设计模式
汀、人工智能19 分钟前
[特殊字符] 第2课:字母异位词分组
数据结构·算法·链表·数据库架构··字母异位词分组
良木生香32 分钟前
【C++初阶】:C++类和对象(下):构造函数promax & 类型转换 & static & 友元 & 内部类 & 匿名对象 & 超级优化
c语言·开发语言·c++
5系暗夜孤魂37 分钟前
系统越复杂,越需要“边界感”:从 Java 体系理解大型工程的可维护性本质
java·开发语言
二月夜1 小时前
Spring循环依赖深度解析:从三级缓存原理到跨环境“灵异”现象
java·spring
小O的算法实验室1 小时前
2026年SEVC,面向主动成像卫星任务规划问题的群体智能与动态规划混合框架,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
网安INF1 小时前
数据结构第一章复习:基本概念与算法复杂度分析
数据结构·算法
无巧不成书02181 小时前
C语言零基础速通指南 | 1小时从入门到跑通完整项目
c语言·开发语言·编程实战·c语言入门·零基础编程·c语言速通