我有一个如下所示的ArrayList:
final List<MyType> myList = new ArrayList<>();
MyType如下所示:
public class MyType {
...
private DateTime startTime;
private DateTime endTime;
private DateTime dateOfContainer; // I use @JSONSerializer here to only serialize date
....
}
JSON看起来像这样:
[
{
...
"endTime": "16:00",
"startTime": "13:00",
"dateOfContainer": "27.11.2015"
},
{
...
"endTime": "12:00",
"startTime": "08:00",
"dateOfContainer": "27.11.2015"
},
{
...
"endTime": "16:00",
"startTime": "13:00",
"dateOfContainer": "25.11.2015"
},
{
...
"endTime": "19:00",
"startTime": "18:00",
"dateOfContainer": "21.11.2015"
},
...
现在我会列出这样一个列表:
List<List<MyType>>
其中具有相同 dateOfContainer 的MyType在一起,例如前两个。
使用Java-8有一种简单的方法吗? 非常感谢!
答案 0 :(得分:1)
myList.stream().collect (Collectors.groupingBy(MyType::getDateOfContainer))
将为您提供Map<DateTime,List<MyType>>
,其中您的对象按日期属性进行分组。
要从此List<List<MyType>>
获取Map
,您可以创建ArrayList
并使用Map
的值对其进行初始化:
List<List<MyType>> list = new ArrayList<> (
myList.stream().collect (Collectors.groupingBy(MyType::getDateOfContainer)).values());
请注意,为了使groupingBy
按预期运行,DateTime
类必须覆盖equals
。我不确定这是不是这样。