繁体   English   中英

Java:将原始布尔值转换为原始 int (0,1) 的好方法

[英]Java: nice way to convert primitive boolean into primitive int (0,1)

我知道这应该很简单,但是......

  • 我有原始的java 布尔值。
  • 我相信这么简单的事情应该不需要额外的方法编码。
  • 我强烈不喜欢三元运营商和在线状态( ?谁想要的声誉和试图回答什么,甚至不读的问题)。 所以(value ? 1 : 0)不适合我。
  • 我不能使用像value.compareTo(false)这样好的片段,因为它是primitive

我想得到的是最后一点,但对于原语。 惊讶没有好方法来做这样一个简单有用的转换吗? 我也是。 你的谷歌比我的大吗? ;-D

更新:

好的,最后我决定为这种情况编写自己的方法,因为不仅有类型转换,而且还有一些将来可以扩展的逻辑,我希望将其封装。 感谢所有参与的人。

如果你不能严格使用value.compareTo(false)因为它是原始的,那么怎么样

Boolean.valueOf(value).compareTo(Boolean.FALSE);

那这个呢?

boolean x = true;

System.out.println(Boolean.compare(x, false));

方式2

System.out.println(5 - Boolean.toString(x).length());

方式3 (更长):

boolean x = true;

try{
    System.out.println(Boolean.toString(x).charAt(4) - 101);
}catch(StringIndexOutOfBoundsException e){
    System.out.println(1);
}

没有什么好办法。 额外的函数定义并没有那么糟糕。 如果你讨厌三元,只需定义一个函数:

int bool_to_int(boolean mybool) {
    if (mybool)
        return 1;
    return 0;
}

使用三元运算符是做您想做的事情的最简单、最有效和最易读的方法。 我鼓励您使用此解决方案。

但是,我无法抗拒提出一个替代的、人为的、低效的、不可读的解决方案。

int boolToInt(Boolean b) {
    return b.compareTo(false);
}

好的,最后这是我发现的最好的事情:

public class Main {

    public static int resultCode(final boolean flag) {
        return Boolean.compare(flag, false);
    }

    public static void main(final String[] args) {
        boolean v1 = false;
        boolean v2 = true;
        System.out.println(v1 + " > " + resultCode(v1));
        System.out.println(v2 + " > " + resultCode(v2));
    }
}

这里有一些关于你的方法的想法 - 都是令人兴奋的,因为嘿比b ? 1: 0复杂得多b ? 1: 0 b ? 1: 0

int bi1(boolean b) {
    // The number of items in a set containing both false and the value
    Set<Boolean> s = new HashSet<Boolean>();
    s.add(b);
    s.add(false);
    return s.size() - 1;
}

int bi2(boolean b) {
    // Side-effect usage.
    int bi = 0;
    boolean x = (b && (bi = 1) == 0);
    return bi;
}

int bi3(boolean b) {
    // Using Compareto in a gratuitously obscure way.
    return (int) Math.signum(("" + b).compareTo(Boolean.FALSE.toString()));
}

int bi4(boolean b) {
    // A twiddle too far.
    return ((int) ("" + !b).charAt(0)) >> 1 & 1;
}

int bi5(boolean b) {
    // The old if heave
    if (b) {
        return 1;
    } else {
        return 0;
    }
}

static final List<Boolean> ltf = Arrays.asList(false, true);

int bi6(boolean b) {
    // List twiddling.
    return ltf.indexOf(b);
}

你还想要几个?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM