首页 > 其他分享 >简化你的代码,提高生产力:这10个Lambda表达式必须掌握

简化你的代码,提高生产力:这10个Lambda表达式必须掌握

时间:2023-04-09 16:32:56浏览次数:27  
标签:10 List list fruit asList 表达式 Lambda

简化你的代码,提高生产力:这10个Lambda表达式必须掌握_lambda

前言

  Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambda表达式,你将更加深入地理解函数式编程的思想,能够更加高效地编写代码。

1. 使用Lambda表达式进行集合遍历

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
for (String fruit : list) {
    System.out.println(fruit);
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
list.forEach(fruit -> System.out.println(fruit));

2. 使用Lambda表达式进行排序

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, new Comparator<String>() {
    public int compare(String s1, String s2) {
        return s1.compareTo(s2);
    }
});

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));

3. 使用Lambda表达式进行过滤

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = new ArrayList<String>();
for (String fruit : list) {
    if (fruit.startsWith("a")) {
        filteredList.add(fruit);
    }
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream().filter(fruit -> fruit.startsWith("a")).collect(Collectors.toList());

4. 使用Lambda表达式进行映射

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = new ArrayList<Integer>();
for (String fruit : list) {
    lengths.add(fruit.length());
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = list.stream().map(fruit -> fruit.length())
.collect(Collectors.toList());

5. 使用Lambda表达式进行归约

未使用Lambda表达式:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = 0;
for (int i : list) {
    sum += i;
}

使用Lambda表达式:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, (a, b) -> a + b);

6. 使用Lambda表达式进行分组

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Integer, List<String>> grouped = new HashMap<Integer, List<String>>();
for (String fruit : list) {
    int length = fruit.length();
    if (!grouped.containsKey(length)) {
        grouped.put(length, new ArrayList<String>());
    }
    grouped.get(length).add(fruit);
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Integer, List<String>> grouped = list.stream().collect(Collectors.groupingBy(fruit -> fruit.length()));

7. 使用Lambda表达式进行函数式接口的实现

未使用Lambda表达式:

public interface MyInterface {
    public void doSomething(String input);
}

MyInterface myObject = new MyInterface() {
    public void doSomething(String input) {
        System.out.println(input);
    }
};
myObject.doSomething("Hello World");

使用Lambda表达式:

MyInterface myObject = input -> System.out.println(input);
myObject.doSomething("Hello World");

8. 使用Lambda表达式进行线程的创建

未使用Lambda表达式:

Thread thread = new Thread(new Runnable() {
    public void run() {
        System.out.println("Thread is running.");
    }
});
thread.start();

使用Lambda表达式:

Thread thread = new Thread(() -> System.out.println("Thread is running."));
thread.start();

9. 使用Lambda表达式进行Optional的操作

未使用Lambda表达式:

String str = "Hello World";
if (str != null) {
    System.out.println(str.toUpperCase());
}

使用Lambda表达式:

Optional<String> str = Optional.ofNullable("Hello World");
str.map(String::toUpperCase).ifPresent(System.out::println);

10. 使用Lambda表达式进行Stream的流水线操作

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = new ArrayList<String>();
for (String fruit : list) {
    if (fruit.startsWith("a")) {
        filteredList.add(fruit.toUpperCase());
    }
}
Collections.sort(filteredList);

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream().filter(fruit -> fruit.startsWith("a")).map(String::toUpperCase).sorted().collect(Collectors.toList());

结尾

&emsp;&emsp;如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

&emsp;&emsp;我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!

标签:10,List,list,fruit,asList,表达式,Lambda
From: https://blog.51cto.com/u_11446735/6178897

相关文章

  • 分享10个高级sql写法
    本文主要介绍博主在以往开发过程中,对于不同业务所对应的sql写法进行归纳总结而来。进而分享给大家。本文所讲述sql语法都是基于MySql8.0+博主github地址:http://github.com/wayn111 欢迎大家关注,点个star一、ORDERBYFIELD()自定义排序逻辑MySql中的排序ORDERBY......
  • PAT Basic 1079. 延迟的回文数
    PATBasic1079.延迟的回文数1.题目描述:给定一个\(k+1\)位的正整数\(N\),写成\(a_k⋯a_1a_0\)的形式,其中对所有\(i\)有\(0≤a_i<10\)且\(a_k>0\)。\(N\)被称为一个回文数,当且仅当对所有\(i\)有\(a_i=a_{k−i}\)。零也被定义为一个回文数。非回文数也可以通过一......
  • RabbitMQ 10 头部模式
    头部模式是根据头部信息来决定的,在发送的消息中是可以携带一些头部信息的(类似于HTTP),可以根据这些头部信息来决定路由到哪一个消息队列中。定义配置类。importorg.springframework.amqp.core.Binding;importorg.springframework.amqp.core.BindingBuilder;importorg.sprin......
  • 在Ubutu(14.10)的Eclipse启动Tomcat,以及部署问题
    启动Tomcat安装了阿土14.10(启动盘报gfxboot.c32:notaCOM32Rimage,网上查得输入live,果然可以,对此解决方式只能说),想装一个javaservlet的环境,下载了eclipse,通过apt-getinstall安装了tomcat和openjava。但是在运行时,RunOnServer中ServerName无法显示,导致无法运行。根据网上的指......
  • 力扣1077(MySQL)-项目员工Ⅲ(中等)
    题目:写一个SQL查询语句,报告在每一个项目中经验最丰富的雇员是谁。如果出现经验年数相同的情况,请报告所有具有最大经验年数的员工。查询结果格式在以下示例中:   employee_id为1和3的员工在project_id为1的项目中拥有最丰富的经验。在project_id为2的项目......
  • 力扣1076(MySQL)-员工项目Ⅱ(简单)
    题目:编写一个SQL查询,报告所有雇员最多的项目。查询结果格式如下所示:  解题思路:方法一:将两个表联结,以project_id进行分组,统计员工数降序排序,然后筛选出第一条数据。1selectproject_id2fromprojecta3joinemployeeb4ona.employee_id=b.employee_id5group......
  • 力扣1075(MySQL)-项目员工Ⅰ(简单)
    题目:项目表 Project:  员工表 Employee:请写一个SQL 语句,查询每一个项目中员工的 平均 工作年限,精确到小数点后两位。查询结果的格式如下:   解题思路:建表语句:1CreatetableIfNotExistsProject_1075(project_idint,employee_idint);2Createtable......
  • CHR(10)和CHR(13)的区别
    总体来说:chr(10)表示换行,chr(13)表示回车百度搜索所得:“换行”(linefeed)和“回车”(carriagereturn):换行(\n)就是光标下移一行却不会移到这一行的开头,回车(\r)就是回到当前行的开头却不向下移一行。Enter键按下后会执行\n\r这样就是我们看到的一般意义的回车了,所以你用16进制文......
  • windows 10 家庭版安装Docker和portainer汉化版
    目录前景提要存在问题一、Docker的windows版本安装1、官网下载:https://www.docker.com/(没有本文问题的直接下载就好.)2、本文是找到其他版本的Docker,装一个不是最新的版本,就可以了。3、系统修改开启本机的虚拟器(1)开启Hyper-V(2)开启虚拟平台和Linux子系统修改默认的安装路......
  • 1012. 至少有 1 位重复的数字
    题目链接:1012.至少有1位重复的数字方法:数位dp解题思路参考:数位DP通用模板,附题单(Python/Java/C++/Go)注意:其中\(isNum\)是用来针对前导\(0\)可能影响结果而设置的标志,如\(010\)(即\(10\))实际是没有重复的数字,而由于前导\(0\)的影响使得是有重复的数字。对于不受前导\(0\)影......