将布尔值序列化为“1”和“0”,而不是“true”和“false”

11

我找不到Boolean类中将Boolean序列化为"1"和"0"而不是"true"和"false"的方法。

是否有本地函数可以实现此功能?如果没有,最佳方式是什么(最优化的方式)?

更新:我确实想把Boolean转换成一个String


1
哪种方法可以将Boolean序列化为"true"和"false"?或者你只是在谈论如何从Boolean生成一个String - Joachim Sauer
6
b为一个布尔值:int i = b ? 1 : 0; - Kevin
@Matthieu,你还有超过10个问题没有被接受。 ;) - Peter Lawrey
2
@Kevin:小心!他在谈论“布尔值”,这种情况下“b”可能是“null”! - Joachim Sauer
@Joachim:啊!非常敏锐。 - Kevin
2
@Kevin,你是指 int i == b ? 1 : 0; 吗? - Eng.Fouad
5个回答

13

如果你想从给定的Boolean生成一个String,那么是的,没有内置方法可以生成"0"或"1",但你可以很容易地编写它:

public static String toNumeralString(final Boolean input) {
  if (input == null) {
    return "null";
  } else {
    return input.booleanValue() ? "1" : "0";
  }
}

根据您的使用情况,如果input为空,则让它抛出NullPointerException可能更合适。 如果这适用于您的情况,那么您可以将该方法简化为第二个return行。


你的方法好像缺少数据类型。 - Eng.Fouad
@Eng.Fouad:确实是,谢谢提醒。现在已经修复了。 - Joachim Sauer

4
你可以使用 CompareTo 方法,具体请参考 此处
public static Integer booleanToInteger(Boolean bool)
{
    if(bool == null) return null;
    else return bool.compareTo(Boolean.FALSE);
}

我不会鼓励这样做,因为它相当难以理解和非明显的。如果你真的要这样做,我建议使用Boolean.FALSE作为参数,以避免自动装箱。 - Joachim Sauer
...而且含糊不清/混淆的代码不太可能被JIT编译器进行优化。 - Stephen C
这应该是被接受的答案,无论是否鼓励,它确实明确回答了我的问题和原帖作者的问题。 - Tigerrrrr

2
如果你想将数据序列化成字符,可以这样做:
public static char toChar(final Boolean b) {
    return b == null ? '?' : b ? '1' : '0';
}

-1

我不确定,但只是随便说一下。你可以使用自己的装饰器类。


装饰器设计模式可以让您以不同的方式自定义输出。您可以将布尔值装饰为0和1的值。 - Talha Ahmed Khan
你看到 OP 是否要求“最优化”的解决方案了吗?你认为装饰器是否符合要求? - Stephen C

-2
使用 Thrift API:
TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory());
String json = serializer.toString(object);

它将布尔值转换为0或1,而不是true/false。


7
你是认真的吗?为了将一个字符串转换成布尔值,竟然要安装整个库,使用两个工厂对象等一系列操作... - Matthieu Napoli

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