如何使用Stream API实现基于可空日期的唯一用户名统计功能?
Stream API重构日期过滤统计唯一用户实现
直接用Stream API的链式调用就能实现和原有代码完全一致的逻辑,重构后的代码如下:
public int getNumberOfUsers(Date after, Date before) { return (int) logRecords.stream() .filter(rec -> (after == null || rec.date.getTime() >= after.getTime()) && (before == null || rec.date.getTime() <= before.getTime())) .map(rec -> rec.user) // 如果LogRecord有getUser()方法,可替换为LogRecord::getUser .distinct() .count(); }
逻辑说明
stream()将logRecords集合转为流进行操作filter中的判断逻辑和原代码完全一致:当after为空时不做起始日期限制,否则要求记录日期不早于after;当before为空时不做结束日期限制,否则要求记录日期不晚于beforemap提取每条符合条件记录的用户名distinct()自动对用户名去重,替代原代码中HashSet的去重功能count()统计去重后的用户数量,转成int类型返回
内容的提问来源于stack exchange,提问作者Дмитрий Аронов
相关产品推荐
相关产品推荐

