Java Stream:按三个字段分组并收集最后一个字段

时间:2018-04-10 14:50:04

标签: java collections stream java-stream collectors

我的对象类型是:

public class MyObjectDTO {
    Long id;
    String name;
    LocalDate date;
    String property;
}

我有一个包含此数据的此对象的ArrayList:

Element0: 1 name1 2018-01-01 property1
Element1: 1 name1 2018-01-01 property2
Element2: 2 name2 2015-05-05 property77
Element3: 2 name2 2015-05-05 property88
Element4: 2 name2 2015-05-05 null
Element5: 3 name3 2020-12-31 property99

我希望有一个新的ArrayList<MyObjectDTO>分组如下:

Element0: 1 name1 2018-01-01 property1, property2
Element1: 2 name2 2015-05-05 property77, property88, null
Element2: 3 name3 2020-12-31 property99

所以,我想按ID,名称和数据进行分组,我想在String property中收集String

是否可以使用Java Stream?

非常感谢, 安德烈

1 个答案:

答案 0 :(得分:0)

你只需要创建一个新方法来检查列表是否包含要添加的对象(按id进行比较),如果包含则只需更新字符串,否则将新对象添加到列表中:

//add obj to list
public void add(MyObjectDTO  obj, ArrayList<MyObjectDTO> list){

    MyObjectDTO objectFromList = getObject(obj,list);

    //not contains
    if(objectFromList == null)
        list.add(obj);
    else //contains
        objectFromList.setProperty(objectFromList.getProperty + ", "+obj.getProperty());

}

public MyObjectDTO getObject(MyObjectDTO  instance,ArrayList<MyObjectDTO> list){
    for(MyObjectDTO obj:list)
        if(obj.equals(instance))
            return obj;

    return null;
}

你只需要覆盖MyObjectDTO类

上的equals方法
相关问题