这句代码是什么意思,没看懂

if (EpList.size()>0 && EpList != null) {
            //把list封装到map
            Map<String, List<Ep>> EPMap = EpList.stream()
                    .collect(Collectors.toMap(d -> DateUtils.formatYearMonth(d.getCreateTime()),
                            Lists::newArrayList,
                            (List<Ep> oldList, List<Ep> newList) -> {
                                oldList.addAll(newList);
                                return oldList;
                            }));
            existUserLineChartDTOList.forEach(d -> {
                if (EPMap.containsKey(d.getMonthName())) {
                    d.setExistingUserCount(EPMap.get(d.getMonthName()).size());
                }
            });

        }

collect(Collectors.toMap(d -> DateUtils.formatYearMonth(d.getCreateTime()),
将时间拿出来转成月字符串
Lists::newArrayList,
(List oldList, List newList) -> {
oldList.addAll(newList);
return oldList;
}));
将newList 集合对象转存给oldList 这个集合对象

existUserLineChartDTOList.forEach(d -> {
if (EPMap.containsKey(d.getMonthName())) {
d.setExistingUserCount(EPMap.get(d.getMonthName()).size());
}
});
这是将existUserLineChartDTOList 对象进行循环,取出d.getMonthName() 这个键值到EPMap.containsKey中
判断是否有数据,
如果有值
d.setExistingUserCount(EPMap.get(d.getMonthName()).size());
将EPMap.get(d.getMonthName()) 取出这个字符,将字符长度保存在 d.setExistingUserCount 中
d 是existUserLineChartDTOList 这个对应的引用

这个if判断,没有十年脑血栓绝对写不出来,先size后判null,真是人才啊

  1. EpList.stream() jdk8的stream流
  2. stream() .collect(Collectors.toMap)结果转成一个map
  3. toMap里的,是在写如何转换成这个map,从代码上来看应该是以创建的日期的年月为key,value为该年月里所有的Ep
  4. forEach不用说了吧,就是在遍历