我收到一个实体列表,我需要将它们按 2 个字段(periodMonth 和 periodYear)分组并作为新列表返回。
为了存储组,我创建了一个类 GroupEntity。
我必须用来分组的字段不属于实体本身,而是属于一个名为 EntityPK 的可嵌入类。
下面是这些类的代码:
实体
@Entity
@Table(name = "Entity")
public class Entity {
@EmbeddedId
private EntityPK entityPk;
@Column
private String someValue;
实体PK
@Embeddable
public class EntityPK {
@Column
private String periodMonth;
@Column
private String periodYear;
团体课
public class GroupOfEntity {
private String periodMonth;
private String periodYear;
private List<Entity> entities;
我可以遍历该列表并创建一个以 periodMonth/Year 为键、以 List 为值的地图,如下所示:
Set<GroupEntity> listOfGroupEntity = new HashSet<GroupEntity>();
for(Entity entity: listOfEntity) {
GroupEntity groupEntity = new GroupEntity();
groupEntity.setPeriodMonth(entity.getEntityPk().getPeriodMonth());
groupEntity.setPeriodYear(entity.getEntityPk().getPeriodYear());
Optional<GroupEntity> findFirst = listOfGroupEntity.stream().filter(a -> a.equals(groupEntity)).findFirst();
if(findFirst.isPresent()) {
findFirst.get().getEntities().add(entity);
}else {
listOfGroupEntity.add(groupEntity);
}
}
但是我怎么能用流来做到这一点呢?
就像是
List<GroupEntity> groupEntities
= listOfEntities.stream().collect(Collectors.groupingBy(Entity::getEntityPk::getPeriodMonth,Entity::getEntityPk::getPeriodYear)
并使用这些实体为每个组创建 GroupEntity 对象。
是否可以?
烙印99
白衣染霜花
相关分类