我收到一个实体列表,我需要将它们按2个字段(periodMonth和periodYear)进行分组,然后作为新列表返回。
要存储组,我创建了一个类GroupEntity。
我必须用于分组的字段不属于Entity本身,而是属于一个称为EntityPK的可嵌入类。
这是这些类的代码:
实体
let database: CKDatabase = ...
database.fetchAll(recordType: "User") { result in
switch result {
case .success(let users):
// Handle fetched users, ex. save them to the database
case .failure(let error):
// Handle Error
}
}
}
EntityPK
@Entity
@Table(name = "Entity")
public class Entity {
@EmbeddedId
private EntityPK entityPk;
@Column
private String someValue;
小组课
@Embeddable
public class EntityPK {
@Column
private String periodMonth;
@Column
private String periodYear;
我可以遍历该列表,并创建一个以periodMonth / Year为键,以List为值的地图,如下所示:
public class GroupOfEntity {
private String periodMonth;
private String periodYear;
private List<Entity> entities;
但是我该如何使用流?
类似
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);
}
}
并使用这些实体为每个组创建GroupEntity对象。
有可能吗?
答案 0 :(得分:3)
假设 No
实现了EntityPK
和equals
,您首先构建hashCode
,然后将其映射到Map<EntityPK, List<Entity>>
。 / p>
假设 List<GroupOfEntity>
具有适当的构造函数,您可以这样做:
GroupOfEntity
答案 1 :(得分:1)
首先,请执行以下操作:
class Car(pygame.sprite.Sprite):
def __init__(self, surf, x, y, speed, angle):
super().__init__()
self.surf = surf
self.surf.set_colorkey(black)
self.pos = pygame.math.Vector2(x, y)
self.angle = angle
self.speed = speed
self.image = pygame.transform.rotate(self.surf, self.angle)
self.rect = self.image.get_rect(center=(x, y))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
self.angle -= 10
elif keys[pygame.K_d]:
self.angle += 10
dirvec = pygame.math.Vector2(0, self.speed).rotate(self.angle)
if keys[pygame.K_w]:
self.pos = self.pos - dirvec
elif keys[pygame.K_s]:
self.pos = self.pos + dirvec
if self.pos.x > 800:
self.pos.x = 0
elif self.pos.x < 0:
self.pos.x = 800
elif self.pos.y > 600:
self.pos.y = 0
elif self.pos.y < 0:
self.pos.y = 600
self.image = pygame.transform.rotate(self.surf, -self.angle)
self.rect = self.image.get_rect(center = (round(self.pos.x), round(self.pos.y)))
然后从上面的Map创建GroupOfEntity。这两个步骤也可以合并。
这是进一步 Map<EntityPK, List<Entity>> groupEntities =
entities.stream().collect(Collectors.groupingBy(Entity::getEntityPk));
地图并创建stream
的组合步骤:
GroupOfEntity
请在github上查看完整的运行示例