【问题标题】:Issue while fetching values in java forEach loop在java forEach循环中获取值时出现问题
【发布时间】:2016-01-06 12:34:31
【问题描述】:

我有一个列表,其中可能有最大 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信息。

【问题讨论】:

  • 您可以编辑您的问题以添加一些详细信息吗?目前还不清楚......
  • 用编辑更新了我的问题
  • 为什么要用第二个学生的数据覆盖 st?为什么不直接从列表中获取第二个学生?还是您想迎合 1 名学生的情况?
  • 你为什么说你“需要迭代”,而实际上你只想获得第一个和第二个元素?

标签: java for-loop foreach java-8


【解决方案1】:

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

我会选择这个...

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 &lt; 2size &gt; 2 情况,除非您可以让您的存储库返回一个真正为您提供该大小保证的集合类型。

【讨论】:

    【解决方案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
    }});
    

    【讨论】:

      【解决方案3】:

      如果您知道您最多有 2 个值,您可以检查 if(studentList.size()&gt;1) 有 2 个值,并将 st 的值设置为 studentList.get(0)studentList.get(1)

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        怎么样

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-15
          • 1970-01-01
          • 2017-12-27
          • 1970-01-01
          • 2016-11-10
          • 1970-01-01
          • 2020-04-29
          • 1970-01-01
          相关资源
          最近更新 更多