Java Steam流-使用心得

介绍Steam

概念:流就是通过 表达式来描述 我们遍历集合、数组 时需要对数组进行操作的表达。

听上去比较拗口,举个例子:我们有一个对象List<User>

我们需要把他转为 Map<Long,User>

 不使用流写法

public static void main(String[] args) {
        List<SysUser> list =new ArrayList<>();
        //TODO 省略数据填充
        Map<Long,SysUser> userMap = new HashMap<>();
        for(SysUser user:list){
            userMap.put(user.getUserId(),user);
        }
    }

使用流的写法

public static void main(String[] args) {
        List<SysUser> list =new ArrayList<>();
        //TODO 省略数据填充
        Map<Long,SysUser> userMap = 
        list.stream().collect(Collectors.toMap(SysUser::getUserId,sysUser -> sysUser));
    }

总结2总写法效果完全一致,复杂度越高 steam对于代码的可读性、简洁性、可拓展性越高。


常用的Steam写法

获取List<SysUser>中所有ID

public static void main(String[] args) {
        List<SysUser> list =new ArrayList<>();
        //TODO 省略数据填充
        List<Long> ids = 
        list.stream().map(SysUser::getUserId).collect(Collectors.toList());
    }

List对象转Map

public static void main(String[] args) {
        List<SysUser> list =new ArrayList<>();
        //TODO 省略数据填充
        Map<Long,SysUser> userMap =
        list.stream().collect(Collectors.toMap(SysUser::getUserId,user -> user));
    }

List<对象>分组后转为Map<List<对象>>

public static void main(String[] args) {
        List<SysUser> list =new ArrayList<>();
        //TODO 省略数据填充
        //通过sex分组
        Map<String,List<SysUser>> userMap 
        =list.stream().collect(Collectors.groupingBy(user -> user.getSex()));
    }

for循环

public static void main(String[] args) {
        List<SysUser> list =new ArrayList<>();
        //TODO 省略数据填充
        list.stream().forEach(item->item.setSex("0"));
        list.stream().forEach(item->{
            item.setSex("0");
            item.setNickName("AAA");
        });
    }

Long[]转List<Long>

public Map<Long, SysContractTemplate> selectByIds(Long... ids) {
        List<Long> longList = Arrays.stream(ids).collect(Collectors.toList());
        return selectByIds(longList);
    }

在项目中处理一对多

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值