JAVA Stream的使用

使用场景:

场景1:
我想得到集合里面的,所有index属性在(30,1,2,3,4,5)中的EmpVo对象。
代码如下:

 List<EmpVo> doctors = empByClass.stream().filter(o ->  
 Arrays.asList(30,1,2,3,4,5).contains(o.getIndex())).collect(Collectors.toList());

场景2:
我想得到集合里面的,所有index属性等于1的EmpVo对象的个数。

 Long doctorSum = empLists.stream().filter(
     emp -> 1== emp.getIndex()).collect(Collectors.toList()).stream().count();

场景3:
我想集合取出某个字段的集合

 List<Integer> groups = list.stream().map(OrgImGroupUser::getOigUid).collect(Collectors.toList());

场景4:
求所有index属性等于1的EmpVo对象的某个属性的和,可以使用如下代码:

 Double doctorSum = empLists.stream().filter(
    emp -> 1== emp.getIndex())
    .collect(Collectors.toList()).stream().mapToDouble(EmpVo::getCount).sum();

场景5:
将符合要求的集合转为map

Map<Integer, Integer> doctors = empByClass.stream().filter(o -> 
DOCTORS_SORT_LIST.contains(o.getIndex())).collect(Collectors.toMap(EmpVo::getIndex, 
EmpVo::getCount));

场景6:
筛选出List集合中符合条件的实体对象

 Doctor doctor =  doctors.stream().filter(s -> s.getCode().equals(val)).findFirst().orElse(null);

场景7:
提取list中的某个属性到新的list

List<String> userIdList = reviewAssignRelas.stream().map(ReviewAssignRela::getUserId).distinct().collect(Collectors.toList());

场景8:
提取list中的多个属性到新的list

             List<User> userList = reviewAssignRelas.stream()
            .map(user -> {
                User u = new User();
                u.setUserId(user.getUserId());
                u.setUserAccount(user.getUserAccount());
                u.setUserNickname(user.getUserNickname());
                return u;
                }).collect(Collectors.toList());

场景9:
1.按某个字段抽取为List

List<Map<String,Object>> decompList = dao.query(sql1);
List<String> ListName = decompList.stream().map(e -> e.get("NAME").toString()).collect(Collectors.toList());

场景10:
时间排序, reversed()为倒序,不加则正序

  List<String> maxUpdateTime = updateTimeList.stream().sorted(Comparator.comparing(s -> DateUtil.convertStringToDate(s.toString(),"yyyy-MM-dd HH:mm:ss").getTime()).reversed()).collect(Collectors.toList());

 List<LoginLogEntity> nextLoginLogs =loginLogs.stream().filter(log ->  
                 log.getCreateTime().getTime()>endTime.getTime() 
                ).sorted((e1, e2) -> e1.getCreateTime().compareTo(e2.getCreateTime())).collect(Collectors.toList());

场景11:
集合内重复的key值,value值实现累加,部分代码如下:

private List<EmpPerson> getList(List<EmpVo> empLists) {
        List<EmpPerson> empVoList = new ArrayList<>();
        empLists.forEach(e -> {
            EmpPerson p = new EmpPerson();
            p.setArea(e.getName());
            if (e.getIndex() == DOCTOR_INDEX) {
                p.setDoctorNumber(e.getCount());
            } else {
                p.setNurseNumber(e.getCount());
            }
            empVoList.add(p);
        });

        return new ArrayList<>(empVoList.stream().collect(Collectors.toMap(EmpPerson::getArea, a -> a, (o1, o2) -> {
            o1.setNurseNumber(o1.getNurseNumber() + o2.getNurseNumber());
            o1.setDoctorNumber(o1.getDoctorNumber() + o2.getDoctorNumber());
            return o1;
        })).values());
    }
评论