如何用更少代码实现MaterialButton列表状态数组的生成?
简洁实现按钮状态数组的几种写法
下面是几种更简洁的写法来实现你想要的效果:
- Java 8+ Stream API 写法
这是最简洁且现代的写法,用函数式编程替代传统循环,代码紧凑易读:
ArrayList<MaterialButton> buttons = new ArrayList<>(); String[] buttonStates = buttons.stream() .map(button -> String.valueOf(button.isChecked())) .toArray(String[]::new);
- forEach + AtomicInteger 替代写法
如果不想用Stream,也可以用forEach结合原子类来追踪索引,不过需要引入java.util.concurrent.atomic.AtomicInteger:
ArrayList<MaterialButton> buttons = new ArrayList<>(); String[] buttonStates = new String[buttons.size()]; AtomicInteger idx = new AtomicInteger(0); buttons.forEach(btn -> buttonStates[idx.getAndIncrement()] = String.valueOf(btn.isChecked()));
- 优化后的传统循环
如果偏好传统循环,可以提取size避免重复计算,让代码更紧凑:
ArrayList<MaterialButton> buttons = new ArrayList<>(); String[] buttonStates = new String[buttons.size()]; int btnCount = buttons.size(); for (int i = 0; i < btnCount; i++) { buttonStates[i] = String.valueOf(buttons.get(i).isChecked()); }
其中Stream API的写法是最推荐的,它不仅代码最短,还能体现现代Java的编程风格,可读性也不差。
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

