我有查询当我使用Group By语句运行时,我得到以下格式的结果。
Country Region Town
---------------------------------------
England North NewCastle
England North Manchester
England North Leeds
England South London
England South Bristol
England South Birmingham
England South Portsmouth
Norway North Trondheim
Norway North Tromso
Norway South Oslo
Norway South Stavanger
Norway West Bergen
结果返回一个JPA对象列表,如下所示
@Entity
@Indexed
@Table(name="Country")
public class Country extends AbstractDomainObject {
private static final long serialVersionUID = 8619373591913330663L;
private String country;
private String region;
private String town
@Id
@Column(name="COUNTRY")
public Long getCountry() {
return batchNumber;
}
public void setCountry(String country) {
this.country = country;
}
@Id
@Column(name="REGION")
public Date getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
@Id
@Column(name="TOWN")
public String getTown() {
return description;
}
public void setTown(String town) {
this.description = description;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
我必须循环遍历JPA对象列表并创建新对象。我似乎无法获得循环结构。我花了太多时间试图做到这一点,所以我想知道是否有 一种更好,更简单的方法。我想要实现的是将数据存储在以下类型的集合中:
class CountryTowns{
String Country;
List<Region> regions;
//getters and setters
}
class Region{
String region;
List<String> towns;
//getters and setters;
}
要将数据存储在上面显示的对象中,我试图循环访问数据并创建对象,如果国家或城镇发生了变化,但我似乎无法做到正确。
List<CountryTowns> countryTowns = new ArrayList();
List<Country> countries = dataServicesFacade.getListOfCountries();
boolean firstIteration = false;
for(Country country : countries){
if (firstIteration){
CountryTowns countryTowns = new CountryTowns;
Region region = new Region;
}
if(prevCountry.equals(country.getCountry())){
if(prevRegion.equals(country.getRegion())){
region.setRegion(countryGetRegion())
region.towns.add(country.getTown());
}else{
countryTowns.regions.add(region);
Region region = new Region();
}
}else{
CountryTowns countryTowns = new CountryTowns;
}
prevCountry = country.getCountry();
prevRegion = country.getRegion();
}
对于列表比上面显示的列数多得多的列表,它可能会很快混淆。您如何解决上述问题,是否有推荐的方法或设计模式可以更容易地遍历列表?