目录
前言
小伙伴们大家好,项目中使用Lambda表达式的地方有很多,而且确实很简洁,来总结下项目中遇到的常用方法,先来看下简介
一、Lambda简介
Lambda表达式:Lambda表达式是一种轻量级的匿名函数,它可以用于替代繁琐的匿名内部类。Lambda表达式可以作为参数传递给方法或函数式接口,并且可以简洁地表示一个功能。Lambda表达式使用箭头(->)将参数列表与函数体分开。
二、常见与Stream处理流的区别
-
Lambda表达式可以在Stream流的操作方法中使用,例如filter、map等。Lambda表达式作为参数传递给这些方法,定义了对流中元素的处理逻辑。
-
Stream流提供了一种简洁而强大的方式来处理集合数据,利用Lambda表达式可以方便地对流中的元素进行转换、过滤、排序等操作。
-
使用Lambda表达式和Stream流可以实现函数式编程的特性,例如将数据处理过程抽象化、实现链式调用等。
三、 具体场景使用方式
只挑常用的,没涉及到的方法还请自行查询使用
1. 场景:在一个电商网站中,需要根据用户的购物车内容计算出订单总金额,并且只计算价格大于100的商品。
2. 场景:在一个学生管理系统中,需要根据学生的成绩对学生列表进行排名,并且只考虑成绩在前10%的学生。
3. 场景:在一个音乐播放器应用中,需要根据用户的喜好对歌曲列表进行过滤和排序,并且只保留前5首最热门的歌曲。
4. 场景:在一个任务调度系统中,需要按照任务的优先级和截止日期对任务队列进行排序和分配,并且只处理前50个任务。
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);
5. 场景:在一个博客网站中,需要根据博客的发布时间和点击量对博客列表进行排序展示,并且只展示最近一周内的博客。
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);
6. 除了和stream结合使用,Lambda还有一些常见使用方式
章末
文章到这里就结束了,后面用到的还会继续补充