Java Stream流常用方法

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中你自己设置的默认值。】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值