判断不为空,怎么写比较好

有多个值,要么都为空,要么都不为空,有什么比较好的写法

阅读 2.7k
3 个回答

Java 代码

import java.util.Arrays;

public class AllNulllOrNotNull {
    public static void main(String[] args) {
        System.out.println(allSameNullState("", "", ""));
        System.out.println(allSameNullState(null, null));
        System.out.println(allSameNullState("", "", null));
    }

    static boolean allSameNullState(Object... objs) {
        var count = Arrays.stream(objs).mapToInt(it -> (it == null ? 0 : 1)).sum();
        return count == 0 || count == objs.length;
    }
}

下面这个可能会快些,毕竟不需要执行完

    static boolean allSameNullState(Object... objs) {
        if (objs.length <= 1) {
            return true;
        }

        boolean firstState = objs[0] == null;
        return Arrays.stream(objs).allMatch(it -> (it == null) == firstState);
    }

你是想要这样的东西?

    public static void main(String[] args) {
        allNull(null, null, null);
    }

    public static boolean allNull(Object... args) {
        if (args == null || args.length == 0) {
            throw new RuntimeException("input is empty");
        }
        for (Object arg : args) {
            if (arg != null) {
                return false;
            }
        }
        return true;
    }

python中有个all方法

其它语言其实也可以用位运算的方式实现:

<?php
function all($data)
{
    if (!is_array($data)) {
        $data = array($data);
    }

    $result = 1;
    foreach ($data as $item) {
        $result &= intval(boolval($item));
    }

    return boolval($result);
}

如果为空转成0,不为空转成1,做&运算,最后再转成bool型。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题