对比if java中的语句

时间:2016-01-18 18:20:36

标签: java

我一直在玩一些代码,并注意到如果我有一个if语句两次做同样的事情,我想知道java是否有任何实现与某个动作相反。

if(id == 1) {
   partnerID = 3;
} else if(id == 2) {
   partnerID = 4;
} else if (id == 3) {
   partnerID = 1;
} else {
   partnerID = 2;
}

如您所见,如果id为1,则合作伙伴ID为3,反之亦然。

3 个答案:

答案 0 :(得分:4)

不,java没有这种"相反的行动"。但你可以做一些简单的数学运算:

   if(id == 1 || id == 3){
       partnerID = 4 - id;
   }else if(id == 2 || id == 4){
       partnerID = 6 - id;
   }

答案 1 :(得分:1)

您可以使用查找表。

private static final int[] ID_TO_PARTNER_ID = [ 2, 3, 4, 1 ];

static int partnerIdForId(int id) {
  return 0 <= id && id < ID_TO_PARTNER_ID.length
      ? ID_TO_PARTNER_ID[id]
      : 2;
}

答案 2 :(得分:0)

使用Java 8和Optional,您可以以功能方式分配partnerIDswap()操作被封装和参数化,这消除了数值常数1,2,3,4的重复。但问题是返回操作的逻辑和数字输出。我们必须知道条件是否已经满足,我们需要交换的结果。这可以通过返回null来完成,但是Optional会变得更优雅。

int partnerID = swap(1, 3, id).map(Optional::of)
       .orElse(swap(2, 4, id)).map(Optional::of)
       .orElse(Optional.of(defaultPartnerId)).get();

private static Optional<Integer> swap(int a, int b, int x) {
    if (x != a && x != b) return Optional.empty();
    return Optional.of(a + b - x);
}