晚上好人。
所以我在Java中使用List有点问题。让我们从开始吧。这是从HQL中的Query返回列表的方法:
public List<PraktykiEntity> getPracticeOfStudent(Long nrAlbumu) {
Query query = em.createQuery("SELECT p FROM PraktykiEntity p WHERE p.nrAlbumu=?1");
query.setParameter(1, nrAlbumu);
List list = query.getResultList();
if (!list.isEmpty()) {
return list;
} else {
return null;
}
}
然后是帮助类:
public class PraktykaInfo {
public Long idPraktykiStudenckiej; //idOfStudentPractice
public SzablonyPraktykEntity szablonPraktyki; //templateOfPractice
public PraktykodawcyEntity praktykodawca; //Employer
public StatusyEntity statusPraktyki; //statusOfPractice
public List<KierunkiStudiowEntity> kierunek; //Course
public TypyPraktykEntity typPraktyki; //typeOfPractice
public LataAkademickieEntity rokAkademicki; //academicYear
public List<StudenciEntity> student;
public List<OpiekunowiePraktykEntity> opiekunPraktyki; //tutor
public List<KoordynatorzyPraktykEntity> koordynatorPraktyki; //coordinator
public AdresyEntity adresPracodawcy; //Employer's address
public PorozumieniaEntity porozumienie; //agreement}
我想做什么 - 从第一个方法获取List <PraktykiEntity>
,然后初始化新的帮助List <PraktykaInfo>
并迭代它,从第一个列表中设置正确的对象然后返回它。起初我以为list.get(i)会工作,但我得到错误“索引越界”。我听说过list.add和.set但不知道如何使用它们。这是方法。而我确实知道info.get(i)没有任何原因让我遇到错误“index out of bounds”
public List<PraktykaInfo> getPracticeOfStudent(Long nrAlbumu) {
List<PraktykiEntity> list = ipraktykiDAO.getPracticeOfStudent(nrAlbumu);
List<PraktykaInfo> info = new ArrayList<PraktykaInfo>();
//System.out.println(list.size());
for(int i = 0; i<list.size(); i++) {
PraktykiEntity practice = ipraktykiDAO.getRow(list.get(i).getIdPraktykiStudenckiej());
if(practice !=null) {
info.get(i).setIdPraktykiStudenckiej(practice.getIdPraktykiStudenckiej());
info.get(i).setSzablonPraktyki(iszablonyPraktykDAO.getTemplate(practice.getIdSzablonu()));
info.get(i).setPraktykodawca(ipraktykodawcyDAO.findEmployer(practice.getIdPraktykodawcy()));
info.get(i).setStatusPraktyki(istatusyDAO.getStatus(practice.getIdStatusu()));
info.get(i).setKierunek(ikierunkiStudiowDAO.getCourseInfo(practice.getIdKierunku()));
info.get(i).setTypPraktyki(itypyPraktykDAO.getTypeOfTraineeship(practice.getIdTypuPraktyki()));
info.get(i).setRokAkademicki(ilataAkademickieDAO.getYearOfCourse(practice.getIdRokuAkademickiego()));
if(practice.getNrAlbumu() !=null) {
info.get(i).setStudent(istudenciDAO.getStudentInfo(practice.getNrAlbumu()));
}
info.get(i).setOpiekunPraktyki(iopiekunowiePraktykDAO.getTutorInfo(practice.getIdOpiekunaPraktyk()));
info.get(i).setKoordynatorPraktyki(ikoordynatorzyPraktykDAO.getCoordinatorInfo(practice.getIdKoordynatoraPraktyk()));
info.get(i).setAdresPracodawcy(iadresyDAO.findByIdAdresu(practice.getIdAdresu()));
if(practice.getIdPorozumienia() !=null) {
info.get(i).setPorozumienie(iporozumieniaDAO.getAgreement(practice.getIdPorozumienia()));
}
} else {
return null;
}
}
return info;
}
答案 0 :(得分:0)
您收到IndexOutOfBoundsException
因为您在空列表中呼叫info.get(i)
。
您可以将代码修改为以下内容:
public List<PraktykaInfo> getPracticeOfStudent(Long nrAlbumu) {
List<PraktykiEntity> list = ipraktykiDAO.getPracticeOfStudent(nrAlbumu);
List<PraktykaInfo> info = new ArrayList<PraktykaInfo>();
//System.out.println(list.size());
for(int i = 0; i<list.size(); i++) {
PraktykiEntity practice = ipraktykiDAO.getRow(list.get(i).getIdPraktykiStudenckiej());
if(practice !=null) {
PraktykaInfo pi = new PraktykaInfo();
pi.setIdPraktykiStudenckiej(practice.getIdPraktykiStudenckiej());
pi.setSzablonPraktyki(iszablonyPraktykDAO.getTemplate(practice.getIdSzablonu()));
pi.setPraktykodawca(ipraktykodawcyDAO.findEmployer(practice.getIdPraktykodawcy()));
pi.setStatusPraktyki(istatusyDAO.getStatus(practice.getIdStatusu()));
pi.setKierunek(ikierunkiStudiowDAO.getCourseInfo(practice.getIdKierunku()));
pi.setTypPraktyki(itypyPraktykDAO.getTypeOfTraineeship(practice.getIdTypuPraktyki()));
pi.setRokAkademicki(ilataAkademickieDAO.getYearOfCourse(practice.getIdRokuAkademickiego()));
if(practice.getNrAlbumu() !=null) {
pi.setStudent(istudenciDAO.getStudentInfo(practice.getNrAlbumu()));
}
pi.setOpiekunPraktyki(iopiekunowiePraktykDAO.getTutorInfo(practice.getIdOpiekunaPraktyk()));
pi.setKoordynatorPraktyki(ikoordynatorzyPraktykDAO.getCoordinatorInfo(practice.getIdKoordynatoraPraktyk()));
pi.setAdresPracodawcy(iadresyDAO.findByIdAdresu(practice.getIdAdresu()));
if(practice.getIdPorozumienia() !=null) {
pi.setPorozumienie(iporozumieniaDAO.getAgreement(practice.getIdPorozumienia()));
}
info.add(pi);
} else {
return null;
}
}
return info;
}
答案 1 :(得分:0)
你必须在List中添加一些内容才能从中获取一些东西。如果i上有东西,你只能在get(i)上使用setter。 更好的方法是使用setter创建完整对象,然后将其添加到List。
PraktykaInfo pi = new PraktykaInfo();
pi.set...
...
info.add(pi);