续签人员李权
import java.util.*;
import java.util.stream.Collectors;
// 假设签到实体类结构如下:
class SignInfo {
private String empId;
private String signType; // "1"签到, "2"签退
private Date signInDate;
private Date signOutDate;
// 构造方法、getter/setter等...
}
public class SignCheck {
public static List filterSignOutNoSignIn(List signList) {
// 按empId分组并提取签退记录
Map<String, List> groupedByEmpId = signList.stream()
.filter(s -> “2”.equals(s.getSignType()))
.collect(Collectors.groupingBy(SignInfo::getEmpId));
// 收集符合条件的记录List<SignInfo> result = new ArrayList<>();groupedByEmpId.forEach((empId, signOutList) -> {// 找到最后一次签退记录SignInfo lastSignOut = signOutList.stream().max(Comparator.comparing(SignInfo::getSignOutDate)).orElse(null);if (lastSignOut == null) return; // 理论上不会发生,但保持健壮性Date threshold = new Date(lastSignOut.getSignOutDate().getTime() + 3600000); // 1小时后// 检查是否存在后续签到boolean hasLaterSignIn = signList.stream().filter(s -> "1".equals(s.getSignType())&& s.getEmpId().equals(empId)&& s.getSignInDate().after(lastSignOut.getSignOutDate())).anyMatch(s -> s.getSignInDate().before(threshold));if (!hasLaterSignIn) {result.add(lastSignOut);}});return result;
}
}