希望通过按属性对其他对象列表进行分组来创建新列表



想要通过按属性对其他对象列表进行分组来创建列表代码如下:

public class MyDate {
public static void main(String[] args) {
List<Data> list = new ArrayList<>();
list.add(new Data("NEW",todayDate,todayDatePlus1,"N"));
list.add(new Data("AUTORIZED",todayDate,todayDatePlus1,"Y"));
list.add(new Data("AUTORIZED",todayDatePlus1,todayDatePlus3,"Y"));
list.add(new Data("AUTHENTICATE",todayDate,todayDatePlus1,"Y"));
list.add(new Data("AUTHENTICATE",todayDatePlus1,todayDatePlus2,"Y"));
list.add(new Data("COMPLETED",todayDate,todayDatePlus1,"N"));
}
}
@Getter
@Setter
class Data{
String phase;
LocalDate startDate;
LocalDate endDate;
String required;

Data(String phase,  LocalDate startDate, LocalDate endDate, String required) {
this.phase = phase;
this.startDate = startDate;
this.endDate = endDate;
this.required = required;
}
}

输出:

In New List 
("NEW",todayDate,todayDatePlus1,"N")
**("AUTORIZED",todayDate,todayDatePlus3,"Y")**
**("AUTHENTICATE",todayDate,todayDatePlus2,"Y")**
("COMPLETED",todayDate,todayDatePlus1,"N")

在新列表中,重复的属性阶段组合为1,并且StartDate和EndDate也会更新。(StartDate Earlist one和EndDate as last one(

您可以将Collectors.toMap与mergefunction一起使用,以合并具有相同phaseData对象的值

Collection<Data> result = list.stream()
.collect(Collectors.toMap(Data::getPhase, Function.identity(), ((existing, replacement) -> {
// Merge values of replacement with existing
existing.setEndDate(replacement.getEndDate());
return existing;
}))).values();

最新更新