对象列表,如何在for循环中设置列表[index] .setter?

时间:2015-03-20 21:20:15

标签: java arrays list

晚上好人。

所以我在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;
    }

2 个答案:

答案 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);