将列表<mytype>重组为List <list <mytype>&gt;

时间:2015-11-27 19:21:29

标签: java arraylist java-8

我有一个如下所示的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有一种简单的方法吗? 非常感谢!

1 个答案:

答案 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。我不确定这是不是这样。