在java forEach循环中获取值时发出问题

时间:2016-01-06 12:34:32

标签: java for-loop foreach java-8

我有一个列表,它可能有最多2个值或最小0个值。现在我需要将第一个项目值和第二个项目值设置为我的pojo类。

List<student> studentList  = studentRepository.findById(idval);


studentList.forEach(student -> {

            st.setStartTime(student.getStartTime()); // fetch from 1st item
            st.setEndTime(student.getEndTime()); // fetch from 1st item
            st.setNextStartTime(student.getStartTime()); // fetch from 2nd item
});

我需要在studentList pojo中设置值。在那个pojo中我需要设置3个属性,其中前两个属性值来自列表的第一项,第三个属性值来自列表的第二项。

任何人都可以建议一些好的方法来做同样的事情。

编辑: 我有一个列表(studentList),它有两个学生类对象项。 (让我们假设该列表包含studentA和studentB信息)。现在我需要迭代studentList并将值设置为一个pojo(st)。在st pojo我有3个属性。在这里,我需要使用studentA信息设置前两个属性值,使用studentB信息设置第三个属性值。

4 个答案:

答案 0 :(得分:3)

在我看来,这不适合迭代 - 你没有对集合中的每个元素做相同的事情,而且,你有不同的行为对于'空集合'案例而不是'非空集合'案例。

我会选择这个...

List<student> studentList  = studentRepository.findById(idval);
if (studentList.size() == 2) {
    st.setStartTime(studentList.get(0).getStartTime()); // fetch from 1st item
    st.setEndTime(student.get(0).getEndTime()); // fetch from 1st item
    st.setNextStartTime(student.get(1).getStartTime()); // fetch from 2nd item
}

它比循环或集合转换更具表现力,因为你并不是真的想要这样做。

警告: - 您可能还想处理size() == 0size < 2size > 2个案,除非您可以让您的存储库返回真正使该大小保证的集合类型你。

答案 1 :(得分:2)

我可以为索引foreach做的最好方法是使用Intstream

List<student> studentList  = studentRepository.findById(idval);

IntStream.range(0, adpodList.size()).forEach(index -> {
            if(index == 0)
            {
 st.setStartTime(studentList.get(index).getStartTime()); // fetch from 1st item
 st.setEndTime(studentList.get(index).getEndTime()); // fetch from 1st item
}
else if(index == 1)
            {
st.setNextStartTime(studentList.get(index).getStartTime()); // fetch from 2nd item
}});

答案 2 :(得分:1)

怎么样?
for (int i=0 ; i<studentList.length-1 ; i++) {
    Student next = studentList.get(i+1);
    studentList.get(i).setNextStartTime(next.getStartTime());
}

答案 3 :(得分:1)

如果您知道自己拥有最多2个值,则可以检查accesstoken有2个值,并使用if(studentList.size()>1)st设置studentList.get(0)的值。

我希望它有所帮助。