java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。跟之前的传统写法对比,能少写不少代码。
新建实体类
1 packagecom.vvvtimes.vo;2
3 importjava.math.BigDecimal;4 importjava.util.Date;5
6 public classUser {7
8 privateLong id;9
10 //姓名
11 privateString name;12
13 //年龄
14 private intage;15
16 //工号
17 privateString jobNumber;18
19 //性别
20 privateString sex;21
22 //入职日期
23 privateDate entryDate;24
25 //家庭成员数量
26 privateBigDecimal familyMemberQuantity;27
28 publicLong getId() {29 returnid;30 }31
32 public voidsetId(Long id) {33 this.id =id;34 }35
36 publicString getName() {37 returnname;38 }39
40 public voidsetName(String name) {41 this.name =name;42 }43
44 public intgetAge() {45 returnage;46 }47
48 public void setAge(intage) {49 this.age =age;50 }51
52 publicString getJobNumber() {53 returnjobNumber;54 }55
56 public voidsetJobNumber(String jobNumber) {57 this.jobNumber =jobNumber;58 }59
60 publicString getSex() {61 returnsex;62 }63
64 public voidsetSex(String sex) {65 this.sex =sex;66 }67
68 publicDate getEntryDate() {69 returnentryDate;70 }71
72 public voidsetEntryDate(Date entryDate) {73 this.entryDate =entryDate;74 }75
76 publicBigDecimal getFamilyMemberQuantity() {77 returnfamilyMemberQuantity;78 }79
80 public voidsetFamilyMemberQuantity(BigDecimal familyMemberQuantity) {81 this.familyMemberQuantity =familyMemberQuantity;82 }83 }
1.分组
通过groupingBy可以分组指定字段
1 //分组
2 Map> groupBySex =userList.stream().collect(Collectors.groupingBy(User::getSex));3 //遍历分组
4 for (Map.Entry>entryUser : groupBySex.entrySet()) {5 String key =entryUser.getKey();6 List entryUserList = entryUser.getValue();
2.过滤
通过filter方法可以过滤某些条件
1 //过滤2 //排除掉工号为201901的用户
3 List userCommonList = userList.stream().filter(a -> !a.getJobNumber().equals("201901")).collect(Collectors.toList());
3.求和
分基本类型和大数类型求和,基本类型先mapToInt,然后调用sum方法,大数类型使用reduce调用BigDecimal::add方法
1 //求和2 //基本类型
3 int sumAge =userList.stream().mapToInt(User::getAge).sum();4 //BigDecimal求和
5 BigDecimal totalQuantity = userList.stream().map(User::getFamilyMemberQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
上面的求和不能过