2011-06-14 12 views
11

No encuentro ningún método en la clase Boolean para serializar un booleano a "1" y "0" en lugar de "verdadero" y "falso".Serialize Boolean a "1" y "0" en lugar de "verdadero" y "falso"

¿Hay alguna función nativa para hacer eso? Si no, ¿cuál es la mejor manera (la forma más optimizada)?

Actualización: de hecho quiero producir un String de un Boolean.

+1

¿Qué método * serializó * a 'Boolean' a" verdadero "y" falso "? ¿O simplemente estás hablando de producir un 'String' de un' Boolean'? –

+0

¿Por qué quieres hacer eso? –

+5

Deje 'b' ser un booleano:' int i = b? 1: 0; '. – Kevin

Respuesta

10

Si usted está hablando de la producción de un String de un determinado Boolean, entonces no, no hay ningún método integrado que produce "0" o "1", pero se puede escribir fácilmente:

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

Dependiendo de su caso de uso, podría ser más apropiado dejar que arroje un NullPointerException si input es nulo. Si ese es su caso, puede reducir el método a la segunda línea return sola.

+0

parece que se perdió el tipo de datos en su método –

+0

@ Eng.Fouad: de hecho lo hice, gracias por el aviso. Corregido ahora. –

-1

No estoy seguro, pero solo lo tiraré. puedes usar tu propia clase de Decorador.

+0

¿Qué? wat? ini? Wataguan? –

+0

Un patrón de diseño de decorador le permite personalizar su salida de diferentes maneras. Puedes decorar tu 'boolean' con un valor' 0' y '1'. –

+0

¿Vió dónde OP pidió la solución "más optimizada"? ¿Crees que los decoradores son elegibles? –

3

Puede utilizar CompareTo:

public static Integer booleanToInteger(Boolean bool) 
{ 
    if(bool == null) return null; 
    else return bool.compareTo(Boolean.FALSE); 
} 
+0

No recomendaría esto, ya que es bastante confuso y no obvio. Y * si * lo haces, utilizaría 'Boolean.FALSE' como argumento, para omitir el auto-boxeo. –

+0

@Joachim Sauer: gracias, lo arreglé. –

+0

... y el código oculto/ofuscado es menos probable que sea optimizable por el compilador JIT. –

1

Si desea serializar a un char que puede hacer

public static char toChar(final Boolean b) { 
    return b == null ? '?' : b ? '1' : '0'; 
} 
-2

Uso Thrift API:

TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory()); 
String json = serializer.toString(object); 

Será boolean a 0 o 1 en lugar de verdadero/falso.

+7

¿Hablas en serio? Instalar una biblioteca completa, usar 2 objetos con fábricas y todo para convertir una cadena en booleana ... –

Cuestiones relacionadas