如何循环列表对象并按索引获取它的元素?

时间:2019-01-23 12:02:05

标签: java java-8

我试图将一个函数从Java 7迁移到Java8,但是在循环列表时我一直无法获得索引元素的值。这样做的好方法是什么?

这是我要迁移的代码:

public class MainFragment extends Fragment implements CompoundButton.OnCheckedChangeListener {

    private AppCompatTextView appCompatTextView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.main_fragment, container, false);
        appCompatTextView = rootView.findViewById(R.id.app_compat_textview);
        final SwitchMaterial switchMaterial = rootView.findViewById(R.id.switch_material);
        switchMaterial.setOnCheckedChangeListener(this);
        return rootView;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (buttonView.isPressed()) {
            if (isChecked) {
                appCompatTextView.setText("ON");
            } else {
                appCompatTextView.setText("OFF");
            }
        }
    }
}

5 个答案:

答案 0 :(得分:7)

您可以使用Stream API来映射您的收藏集:

List<Employe> listEmploye  = ids.stream()
.map(Long::valueOf)
.map(BigDecimal::valueOf)
.map(this::findByIdPointage)
.collect(Collectors.toList());

答案 1 :(得分:3)

 List<Employe> listEmploye = ids.stream()
          .mapToLong(Long::parseLong)
          .mapToObj(BigDecimal::valueOf)
          .map(this::findByIdPointage)
          .collect(Collectors.toList());

那么有一个BigDecimal的构造函数采用了String,因此可以简化为:

List<Employe> listEmploye = ids.stream()
           .map(BigDecimal::new) 
           .map(this::findByIdPointage)
           .collect(Collectors.toList())   

答案 2 :(得分:2)

public List<Employee> getEmployees(Set<String> ids) {
    return ids.stream()
              .map(id -> BigDecimal.valueOf(Long.parseLong(id)))
              .map(this::findByIdPointage)
              .collect(Collectors.toList());
}

答案 3 :(得分:1)

您目前的方法没有什么问题,只是因为Java 8引入了lambda和新方法,但这并不意味着您必须使用它们。

如果要使用流,可以在下面执行。 Long.valueOf()映射可能是多余的:

List<Employe> listEmploye = ids.stream()
   .map(Long::valueOf)
   .map(BigDecimal::valueOf)
   .map(this::findByIdPointage)
   .collect(Collectors.toList())

答案 4 :(得分:0)

您不需要使用流来完成此任务,但是如果您愿意,可以改善for循环:

List<Employe> listEmploye = new ArrayList<>();
ids.forEach(id -> listEmploye.add(findByIdPointage(new BigDecimal(id))));