我试图将一个函数从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");
}
}
}
}
答案 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))));