【笔记】获取列表中所有用户的用户名集合 list.stream().map().collect(Collectors.toList())

本文介绍如何使用Java8的Stream API简化从用户集合中提取用户名的过程,对比传统for循环方式,展示lambda表达式的简洁与高效。

需求,获取列表中所有用户的用户名集合

常规写法


List<String> names=new ArrayList<String>();
//users :用户集合
for(int i=0;i<users.size();i++){
  names.add(users.get(i).getName());

}

使用java8 api方法list.stream().map().collect(Collectors.toList()) 可以一行完成


List<String> names= users.stream().map(User::getName).collect(Collectors.toList())
//users User实体类对象集合
//User 实体类
//getName 实体类属性的get方法

//或者
List<String> names= users.stream().map(user->user.getName()).collect(Collectors.toList());
//user User实体类对象
//getName 实体类属性的get方法

User::getName和user ->user.getName()都是 lambda表达式

{ String userId = Optional.ofNullable(param.getUserId()).orElse(LoginUserUtil.getLoginUserId()); Integer queryType = Optional.ofNullable(param.getQueryType()).orElse(1); Integer createTimeSort = Optional.ofNullable(param.getCreateTimeSort()).orElse(0); List<TraineeUserNoteDTO> allNoteList = new ArrayList<>(); if (queryType == 1){ //查询我发布的笔记 allNoteList = traineeUserNoteMapper.getMyNotePage(createTimeSort, userId); } else if (queryType == 2) { //查询我点赞的笔记 List<ZshLikeDTO> zshLikeDTOS = traineeLikeMapper.selectList(new LambdaQueryWrapper<ZshLikeDTO>() .eq(ZshLikeDTO::getUserId, userId) .eq(ZshLikeDTO::getObjectType, 4)); if (CollectionUtils.isEmpty(zshLikeDTOS)){ return new Page<>(param.getCurrent(), param.getSize()); } List<String> notes = zshLikeDTOS.stream().map(ZshLikeDTO::getObjectId).collect(Collectors.toList()); List<ZshUserNoteDTO> zshNoteList = traineeUserNoteMapper.selectBatchIds(notes); allNoteList = zshNoteList.stream().map(zshUserNoteDTO -> { TraineeUserNoteDTO traineeUserNoteDTO = new TraineeUserNoteDTO(); BeanUtils.copyProperties(zshUserNoteDTO, traineeUserNoteDTO); return traineeUserNoteDTO; }).collect(Collectors.toList()); } //获取笔记点赞数,需获取全部笔记及点赞数才可排序 List<String> noteIdList = allNoteList.stream() .map(TraineeUserNoteDTO::getId) .filter(Objects::nonNull) .collect(Collectors.toList()); if (noteIdList.isEmpty()) { return new Page<>(param.getCurrent(), param.getSize(), 0); } Map<String, Integer> mapLikeCount = traineeLikeMapper.selectLikeCount(noteIdList, 4) .stream() .collect(Collectors.toMap(IdCountModel::getId, IdCountModel::getCount)); List<MyNoteVO> allNoteLikeList = allNoteList.stream().map(dto -> { MyNoteVO myNoteVO = new MyNoteVO(); BeanUtils.copyProperties(dto, myNoteVO); //设置笔记点赞数 myNoteVO.setLikeCount(mapLikeCount.getOrDefault(myNoteVO.getId(), 0)); return myNoteVO; }).collect(Collectors.toList()); //根据点赞数排序 if (param.getLikeCountSort() != null){ if (param.getLikeCountSort() == 1
03-13
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值