当前位置:网站首页>Lambda表达式案例
Lambda表达式案例
2022-08-03 05:09:00 【*super】
一、语法
//过滤重量为5的水果
List<Fruit> res = fruits.stream().filter(f -> f.getWeight() == 5).collect(Collectors.toList());
//遍历打印过滤后的信息
System.out.println(res);
/*
fruits.stream()将集合变成一个流
.filter(f -> f.getWeight() == 5)表示过滤重量为5的水果
.collect(Collectors.toList());表示将数据收集放入一个新的list里
*/
二、方法
1.map、reduce
map表示对流中的每个数据做一个映射函数处理,它不会改变原来的元素,而是会新生成数据
//将集合中的水果对象名称全部取出来获得一个新的名称集合
List<String> res = fruits.stream().map(Fruit::getName).collect(Collectors.toList());
//遍历打印过滤后的信息
res.forEach(System.out::println);
/*
map函数接受一个参数,返回一个值
Fruit::getName是f->f.getName()的缩写,这是Lambda的一个语法糖,理解为如果一个Lambda代表的只是“直接调用这个方法”,那最好还是用名称来调用它,而不是去描述如何调用它
所以整段代码的意思就是将流中的每一个水果对象都取名称,最后将所有名称收集起来放入一个新的list中
*/
reduce
//将集合中的水果重量总数统计出来
int totalWeight = fruits.stream().map(Fruit::getWeight).reduce(0, (a, b) -> a + b);
System.out.println(totalWeight);
2.sort、limit、distinct
(1)sort limit
取出集合中重量排名前3的水果
List<Fruit> fruitList = fruits.stream().sorted((f1, f2) -> Integer.compare(f2.getWeight(), f1.getWeight())).limit(3).collect(Collectors.toList());
//遍历打印过滤后的信息
fruitList.forEach(f-> System.out.println(f.toString()));
(2)distinct能完成去重的操作
List<Integer> collect = fruits.stream().map(Fruit::getWeight).sorted().distinct().collect(Collectors.toList());
//遍历打印过滤后的信息
collect.forEach(f-> System.out.println(f.toString()));
(3) 统计
//最大值
Optional<Integer> optionalMax = fruits.stream().map(Fruit::getWeight).reduce(Integer::max);
//最小值
Optional<Integer> optionalMin = fruits.stream().map(Fruit::getWeight).reduce(Integer::min);
System.out.println(optionalMax.orElse(0));
System.out.println(optionalMin.orElse(0));
*(4) 查找
//查看集合中是否有重量为5的数据
boolean match = fruits.stream().anyMatch(fruit -> fruit.getWeight() == 5);
System.out.println(match);
Optional<Fruit> first = fruits.stream().filter(fruit -> fruit.getWeight() == 5).findFirst();
//如果存在就打印水果信息
first.ifPresent(fruit -> System.out.println(fruit.toString()));
/*
anyMatch返回一个bool值表示流中是否存在这样的数据
findFirst()表示从流中查询第一个满足条件的数据
*/
三、Lambda表达式案例
1.题目
现在有一个Person类,有姓名,城市,年龄三个属性:
public class Person {
/** * 人名 */
private String name;
/** * 城市名 */
private String city;
/** * 年龄 */
private int age;
get and set、构造方法、tostring。
现在准备好了数据如下:
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三","北京",22));
personList.add(new Person("李四","长沙",28));
personList.add(new Person("王五","郑州",17));
personList.add(new Person("赵六","南京",33));
personList.add(new Person("郑七","深圳",40));
personList.add(new Person("李八","上海",36));
personList.add(new Person("陈十","上海",24));
}
}
要求:
找出集合中哪些是上海的
找出集合中最大的年龄和最小的年龄是多少
统计年龄总和
按年龄倒序排序取出前3名
统计集合中出现的城市,要求不能重复
判断集合中是否有姓王的人
找出集合中第一个姓郑的人
2.代码
(1)新建人类
package test;
/**
* @Author:张金贺
* @Date:2022/7/30 9:53
* @Version 1.0
*/
public class Person {
/**
* 人名
*/
private String name;
/**
* 城市名
*/
private String city;
/**
* 年龄
*/
private int age;
public Person() {
}
public Person(String name, String city, int age) {
this.name = name;
this.city = city;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", city='" + city + '\'' +
", age=" + age +
'}';
}
}
(2)添加数据
package test;
import java.util.ArrayList;
import java.util.List;
/**
* @Author:张金贺
* @Date:2022/7/30 9:53
* @Version 1.0
*/
public class main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三","北京",22));
personList.add(new Person("李四","长沙",28));
personList.add(new Person("王五","郑州",17));
personList.add(new Person("赵六","南京",33));
personList.add(new Person("郑七","深圳",40));
personList.add(new Person("李八","上海",36));
personList.add(new Person("陈十","上海",24));
}
}
(3)按要求编写
找出集合中哪些是上海的
// 查找地址为上海的人
List<Person> res = personList.stream().filter(f -> f.getCity() == "上海").collect(Collectors.toList());
// 遍历打印过滤后的信息
System.out.println(res);
找出集合中最大的年龄和最小的年龄是多少
//最大值
Optional<Integer> optionalMax = personList.stream().map(Person::getAge).reduce(Integer::max);
//最小值
Optional<Integer> optionalMin = personList.stream().map(Person::getAge).reduce(Integer::min);
System.out.println(optionalMax.orElse(0));
System.out.println(optionalMin.orElse(0));
统计年龄总和
//将集合中的年龄总和统计出来
int total = personList.stream().map(Person::getAge).reduce(0, (a, b) -> a + b);
System.out.println(total);
按年龄倒序排序取出前3名
List<Person> personList1 = personList.stream().sorted((f1, f2) -> Integer.compare(f2.getAge(), f1.getAge())).limit(3).collect(Collectors.toList());
//遍历打印过滤后的信息
personList1.forEach(f-> System.out.println(f.toString()));
统计集合中出现的城市,要求不能重复
List<String> collect = personList.stream().map(Person::getCity).sorted().distinct().collect(Collectors.toList());
//遍历打印过滤后的信息
collect.forEach(f-> System.out.println(f.toString()));
判断集合中是否有姓王的人
// 判断集合中是否有姓王的人
boolean match = personList.stream().anyMatch(f -> f.getName() == "王五");
System.out.println(match);
找出集合中第一个姓郑的人
// 找出集合中第一个姓郑的人
Optional<Person> first = personList.stream().filter(names -> names.getName() == "郑七").findFirst();
//如果存在就打印信息
first.ifPresent(names -> System.out.println(names.toString()));
(4)综合
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Author:张金贺
* @Date:2022/7/30 9:53
* @Version 1.0
*/
public class main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三","北京",22));
personList.add(new Person("李四","长沙",28));
personList.add(new Person("王五","郑州",17));
personList.add(new Person("赵六","南京",33));
personList.add(new Person("郑七","深圳",40));
personList.add(new Person("李八","上海",36));
personList.add(new Person("陈十","上海",24));
// 查找地址为上海的人
List<Person> res = personList.stream().filter(f -> f.getCity() == "上海").collect(Collectors.toList());
// 遍历打印过滤后的信息
System.out.println(res);
System.out.println("-----------------------------------------------------");
//最大值
Optional<Integer> optionalMax = personList.stream().map(Person::getAge).reduce(Integer::max);
//最小值
Optional<Integer> optionalMin = personList.stream().map(Person::getAge).reduce(Integer::min);
System.out.println(optionalMax.orElse(0));
System.out.println(optionalMin.orElse(0));
System.out.println("-----------------------------------------------------");
//将集合中的年龄总和统计出来
int total = personList.stream().map(Person::getAge).reduce(0, (a, b) -> a + b);
System.out.println(total);
System.out.println("-----------------------------------------------------");
List<Person> personList1 = personList.stream().sorted((f1, f2) -> Integer.compare(f2.getAge(), f1.getAge())).limit(3).collect(Collectors.toList());
//遍历打印过滤后的信息
personList1.forEach(f-> System.out.println(f.toString()));
System.out.println("-----------------------------------------------------");
List<String> collect = personList.stream().map(Person::getCity).sorted().distinct().collect(Collectors.toList());
//遍历打印过滤后的信息
collect.forEach(f-> System.out.println(f.toString()));
System.out.println("-----------------------------------------------------");
// 判断集合中是否有姓王的人
boolean match = personList.stream().anyMatch(f -> f.getName() == "王五");
System.out.println(match);
System.out.println("-----------------------------------------------------");
// 找出集合中第一个姓郑的人
Optional<Person> first = personList.stream().filter(names -> names.getName() == "郑七").findFirst();
//如果存在就打印信息
first.ifPresent(names -> System.out.println(names.toString()));
System.out.println("-----------------------------------------------------");
}
}
边栏推荐
- 2022/08/02 学习笔记 (day22) 多线程
- Windows 安装PostgreSQL
- 「短视频+社交电商」营销模式爆发式发展,带来的好处有什么?
- Interface test framework combat (1) | Requests and interface request construction
- Build your own web page on raspberry pie (1)
- 【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability
- Common fluorescent dyes to modify a variety of groups and its excitation and emission wavelength data in the data
- OSI的分层特点、传输过程与三次握手、四次挥手、tcp与udp包头的描述
- 接口和协议
- 【Harmony OS】【FAQ】Hongmeng Questions Collection 1
猜你喜欢
Interface test practice | Detailed explanation of the difference between GET / POST requests
安装IIS服务(Internet信息服务(Internet Information Services,简写IIS,互联网信息服务)
3. 无重复字符的最长子串
Jmeter 模拟多用户登录的两种方法
13.< tag-动态规划和回文字串>lt.647. 回文子串 + lt.516.最长回文子序列
Power button 561. An array of split
数字孪生园区场景中的坐标知识
typescript40-class类的保护修饰符
修饰生物素DIAZO-生物素-PEG3-DBCO|重氮-生物素-三聚乙二醇-二苯基环辛炔
多肽介导PEG磷脂——靶向功能材料之DSPE-PEG-RGD/TAT/NGR/APRPG
随机推荐
13.< tag-动态规划和回文字串>lt.647. 回文子串 + lt.516.最长回文子序列
How to use the interface management tool YApi?Beautiful, easy to manage, super easy to use
Concepts and Methods of Exploratory Testing
[Harmony OS] [ArkUI] ets development graphics and animation drawing
社交电商如何做粉丝运营?云平台怎么选择商业模式?
阿里云对象存储oss私有桶生成链接
typescript44-对象之间的类兼容器
UV decomposition of biotin - PEG2 - azide | CAS: 1192802-98-4 biotin connectors
Fluorescent marker peptides FITC/AMC/FAM/Rhodamine TAMRA/Cy3 / Cy5 / Cy7 - Peptide
多肽介导PEG磷脂——靶向功能材料之DSPE-PEG-RGD/TAT/NGR/APRPG
js的垃圾回收机制
Exception(异常) 和 Error(错误)区别解析
常见亲脂性细胞膜染料DiO, Dil, DiR, Did光谱图和实验操作流程
IO进程线程->线程->day5
在树莓派上搭建属于自己的网页(1)
Interface test framework combat (1) | Requests and interface request construction
Get the Ip tool class
接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock
js中的闭包
js实现一个 bind 函数