gpt4 book ai didi

java - 如何使用 Java Stream API(groupingBy 收集器)对列表中的值进行分组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:57 26 4
gpt4 key购买 nike

我有 Entry 的列表对象。 Entry是一个:

class Entry {
private final Date date;
private final String value;

// constructor
// getters
}

我需要按天对这些条目进行分组。例如,

2011-03-21 09:00 VALUE1
2011-03-21 09:00 VALUE2
2011-03-22 14:00 VALUE3
2011-03-22 16:00 VALUE4
2011-03-21 16:00 VALUE5

应该分组:

2011-03-21
VALUE1
VALUE2
VALUE5

2011-03-22
VALUE3
VALUE4

我想要一个Map<Date, List<Entry>> . 如何使用 Stream API(groupingBy 收集器)获取它?

我的尝试如下:

final Map<Date, List<Entry>> entries =
list.stream().collect(Collectors.groupingBy(request -> {
final Calendar ogirinal = Calendar.getInstance();
ogirinal.setTime(request.getDate());

final Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, ogirinal.get(Calendar.DAY_OF_MONTH));
cal.set(Calendar.MONTH, ogirinal.get(Calendar.MONTH));
cal.set(Calendar.YEAR, ogirinal.get(Calendar.YEAR));

return cal.getTime();
}));

输出:

2011-03-21
VALUE1
2011-03-21
VALUE2
2011-03-22
VALUE3
VALUE4
2011-03-21
VALUE5

最佳答案

您必须截断日期值,因为它们可能不同到毫秒:

import static java.time.temporal.ChronoUnit.DAYS;

final Map<Instant, List<Entry>> entries =
list.stream().collect(Collectors.groupingBy(request ->
request.getDate().toInstant().truncatedTo(DAYS)));

关于java - 如何使用 Java Stream API(groupingBy 收集器)对列表中的值进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49195841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com