您的位置:首页 > 编程语言 > Java开发

Java8:函数式编程与Lambda表达式

2017-05-11 18:29 519 查看

一、代码

/* 3、使用Stream API和Lambda表达式来进行筛选匹配,并依据推送标志进行推送 */
Map<Date, Map<Boolean, List<Schedule>>> scheduleTodayMap = pushSchedules
.stream()
.collect(
groupingBy(
Schedule::getEffectdate,
groupingBy((Schedule s) -> StringUtil
.formatDate(new Date(), "yyyy-MM-dd")
.equals(StringUtil.formatDate(
s.getEffectdate(), "yyyy-MM-dd")))));
List<Schedule> scheduleTodayList = null;
for (Map<Boolean, List<Schedule>> v : scheduleTodayMap.values())
scheduleTodayList = v.get(true);
List<Room> rooms = (List<Room>) roomRepository.findAll();
List<String> roomCodes = scheduleTodayList.stream()
.map(Schedule::getRoom).map(Room::getCode)
.flatMap(s -> rooms.stream().map(Room::getCode).filter(s1 -> {
return s.equals(s1) == true;
})).collect(toList());
boolean isRoomCodeInDataBase = false;
if (scheduleTodayList != null)
isRoomCodeInDataBase = roomCodes.size() > 0;
String roomCode;
String userCode;
Integer flag;
int i = 0;
for (String s : scheduleToday) {
roomCode = s.substring(s.indexOf("-") + 1, s.indexOf("*"));
userCode = s.substring(s.indexOf(".") + 1, s.indexOf("-"));
flag = Integer.valueOf(s.substring(s.indexOf("*") + 1));
room = roomRepository.findByCode(roomCode);
doctor = doctorRepository.findByCode(userCode);
if (isRoomCodeInDataBase) {
roomService.updateRoom(room.getId(), room.getName(),
doctor.getCode(), doctor.getName(), doctor.getProfit(),
doctor.getPhotoPath());
pushSchedule(room, doctor, flag, flush);
i++;
if (i == scheduleToday.size())
f = 0;/* 最后,将成功标志置为0 */
}
}
return f.toString();


二、业务场景

        详见:流程设计与代码注释:冷思考(二)

三、重构缘由

        项目早与2016年前交付使用,2017年4月初,由于硬件故障频发,需要从软件方面进行优化,在修改代码时,发现原代码封装与抽象都做的不太好,一些设计模式也未很好的应用,最近也正好在看一些Java的书籍,遂使用Java8的函数式编程新特性尝试了一二,代码量减少明显,抽象与封装、命名和注释也更加规范。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: