将布尔对象数组转换为布尔原始数组?

11

我有一个类型为Boolean的ArrayList,需要将其作为boolean[]进行操作,因为我正在尝试使用:

AlertDialog builder;
builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { ... });

然而,虽然我可以创建一个布尔对象数组,但我找不到一种有效的方法将这个对象数组转换为建造函数所需的原始数组(我能想到的唯一方法是遍历对象数组并构建一个新的原始数组)。

我从ArrayList中检索我的对象数组如下:

final Boolean[] checkedItems = getBoolList().toArray(new Boolean[getBoolList().size()]);

我是否可以对我的ArrayList做些什么?或者是否有一种明显的类型转换方法我错过了?

感谢任何帮助!


抱歉,没有看到这个条目 - 这几乎与那个问题完全相同。 - Kaiesh
2个回答

12
您没有漏掉任何内容,恐怕唯一的方法就是遍历列表。
(一个未经测试的)示例:
private boolean[] toPrimitiveArray(final List<Boolean> booleanList) {
    final boolean[] primitives = new boolean[booleanList.size()];
    int index = 0;
    for (Boolean object : booleanList) {
        primitives[index++] = object;
    }
    return primitives;
}

编辑(根据Stephen C的评论):或者您可以使用第三方工具,例如Apache Commons ArrayUtils:

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/ArrayUtils.html


1
+1 - 有第三方库提供了帮助方法来完成这个任务,但使用这样的库会带来其他问题。因此,编写自己的方法(如上所述)是最简单的解决方案。 - Stephen C
1
@Stephen C:如果您不想使用任何其他有用的第三方库功能,并且想要为每种原始类型自己编写此类代码,那么这是最简单的解决方案。对我来说似乎不值得。这种类型的复制/粘贴实现越少,世界就会变得更好。 - ColinD
1
世界可以飞跃!如果您正在遵循使使用第三方库变得困难的规则,则项目特定的辅助方法在实际上是正确的解决方案。即使没有这样的规则,引入外部库也会增加依赖关系管理问题。(即使使用Maven...在某些情况下) - Stephen C
Stephen,我倾向于同意你的观点 - 我认为我没有充分利用第三方库来证明额外的依赖管理和应用程序大小增加对我的用户有益。我尽量使用尽可能多的本地方法! - Kaiesh
你需要检查空值。 - John Doe

5

使用Guava,您可以执行boolean[] array = Booleans.toArray(getBoolList());操作。


谢谢您,虽然有很多第三方库可用,但我担心我没有充分利用它们来增加我的应用程序包的总大小。 - Kaiesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接