List转换成Map(键为id,值为account)
Map<Long, String> userMap = userService.list()
.stream().collect(Collectors.toMap(SysUser::getId, SysUser::getAccount));
通过student表中的用户id获取user表中的名称
List<Student> students = page.getRecords();
students.stream().map(s -> {
String name = userMap.get(s.getStuid())
return name;
}).collect(Collectors.toList());
只获取id(只获取实体类集合中的某个字段的值)
List<Long> userIds = userService.list(
Wrappers.<SysUser>lambdaQuery().like(SysUser::getAccount, req.getCreator())
).stream().map(SysUser::getId).collect(Collectors.toList());
只获取不为null的id
List<Long> userIds = userService.list(
Wrappers.<SysUser>lambdaQuery().like(SysUser::getAccount, req.getCreator())
).stream().map(SysUser::getId).filter(Objects::nonNull).collect(Collectors.toSet())
list转换成一对多的map
Map<Integer, List<SysUser>> maps = userService.list().stream().collect(Collectors.groupingBy(SysUser::getAge));
排序(必须要接收排序后的值)
//使用.sorted对时间进行排序(默认升序) 加.reversed()为降序
集合 = 集合.stream().sorted(Comparator.comparing(AccountCheckingChildrenResp::getCreateTime).reversed()).collect(Collectors.toList());
集合分页
集合.stream().skip((req.getPage()-1)*req.getPageSize()).limit(req.getPageSize()).collect(Collectors.toList());
//使用limit()截取数据
集合.stream().limit(5); //5 :获取前五个数据
如果key重复,取最后一个值
List<User> list = Arrays.asList(
new User().setId("1").setName("张小"),
new User().setId("2").setName("李大"),
new User().setId("2").setName("王五"),
new User().setId("2").setName("张三")
);
key重复统计重复key的某一字段的总和
//Map形式
Map<Long, InvoiceAddProductReq> saveReqMap = reqProducts.stream().collect(Collectors.toMap(InvoiceAddProductReq::getId, Function.identity(), (first, second) -> {
first.setNum(Integer.sum(first.getNum(), second.getNum()));
return first;
}));
//List形式
List<StorageMaster> storageMasters = Lists.newArrayList(masters.stream().collect(Collectors.toMap(StorageMaster::getStorageMessageId, Function.identity(), (first, second) -> {
first.setUnitPrice(first.getUnitPrice().add(second.getUnitPrice()));
return first;
})).values());
2个参数的toMap方法
Map<String, String> map = list.stream() //v1:显示第一个,v2:显示最后一个
.collect(Collectors.toMap(User::getId, User::getName,(v1, v2) -> v2));
System.out.println(map);
结果:{1=张小, 2=张三}
//返回任意一条数据
findAny()
orElse(null)//表示如果一个都没找到返回null。【orElse()中可以塞默认值。如果找不到就会返回orElse中你自己设置的默认值。】
orElseGet(null)//表示如果一个都没找到返回null。【orElseGet()中可以塞默认值。如果找不到就会返回orElseGet中你自己设置的默认值。】