我想查找给定日期列表中第1周,第2周,第3周和第4周的日期数
[2017-11-22 21:41:39.0, 2017-11-27 23:15:26.0, 2017-11-27 23:26:23.0,
2017-11-28 19:50:18.0, 2017-11-29 16:14:33.0] are dates
//By Using map
Map<Integer, List<Date>> map;
map = inboxOutboxentityList.stream()
.collect(Collectors.groupingBy(element ->
element.getDate().get(weekFields.weekOfWeekBasedYear())
)
);
答案 0 :(得分:1)
如果可以的话,只要忘记过时的Date
课程,并用纯java.time
解决问题。你的代码离工作不远了。
List<LocalDateTime> entities = Arrays.asList(
LocalDateTime.of(2017, Month.NOVEMBER, 22, 21, 41, 39),
LocalDateTime.of(2017, Month.NOVEMBER, 27, 23, 15, 26),
LocalDateTime.of(2017, Month.NOVEMBER, 27, 23, 26, 23),
LocalDateTime.of(2017, Month.NOVEMBER, 28, 19, 50, 18),
LocalDateTime.of(2017, Month.NOVEMBER, 29, 16, 14, 33));
Map<Integer, Long> countPerWeek = entities.stream()
.collect(Collectors.groupingBy(
ldt -> ldt.get(WeekFields.ISO.weekOfWeekBasedYear()),
Collectors.counting()));
System.out.println(countPerWeek);
打印:
{48=4, 47=1}
因此,第47周为4,第48周为4.我相信这就是你想要的。如果需要,请替换其他WeekFields
对象。
如果要获取Date
个对象的列表,则需要先将它们转换为现代类。关于如何做到这一点有很多问题和答案,快乐的搜索。正如您可能已经意识到的那样,您可以在同一系列的流操作中完成它。