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

thank4
  • 6

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

回复
阅读 985
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型。

宣传栏