当前位置: 首页 > 知识库问答 >
问题:

用Java8实现autoboxing与Object和int的比较

赫连彬炳
2023-03-14

我们有需要从Java7升级到Java8的代码。一大堆这样的片段:

public class TestJava8 {

    private static void TestIntegerConversion(){
        Map<String, Object> m = new HashMap<>();
        System.out.println(m.get("status") != 0);
    }

    public static void main(String[] argvs){
        TestIntegerConversion();
    }
}

我们利用了m.get(“status”)!=0返回false的优点,仅当键“status”有一个int值,但它不是0时。如果“状态”为0或被省略,它将返回true。这是所需的行为。

共有1个答案

冷善
2023-03-14

您可以创建一个静态实用函数,它显式地执行您需要的操作。如果您需要全局更改此状态逻辑,它也会很有帮助。

/**
 * Returns true if value is null or a non-integer or a non-zero integer.
*/
public static boolean isNonZeroOrMissingStatusValue(final Object value) {
    return !isZeroStatusValue(value);
}

/**
 * Returns true if value is an integer zero.
*/
public static boolean isZeroStatusValue(final Object value) {
    return (value instanceof Integer) // this will be false if value is null
        && ((Integer) value).intValue() == 0;
}

...

private static void TestIntegerConversion(){
    Map<String, Object> m = new HashMap<>();
    System.out.println(isNonZeroOrMissingStatusValue(m.get("status")));
}
 类似资料:
  • 问题内容: 是否有更好的方法来计数Java8中的int出现次数 问题答案: 尝试:

  • 我知道这些接口用于对集合中的对象进行排序。但我怀疑这两者的真正区别。我读到的一个事实是,如果要比较两个对象而不使用当前对象,请使用Compariable(此)。 但我的问题是即使使用比较器,我们也会比较相同的对象类型。 这里真正的区别是什么。我很困惑。假设下面的例子, 如果我使用比较器,我会让一个类实现比较器,而不是这个。年龄,它有人。年龄那么这里有什么不同呢? 我不知道Collections.s

  • 描述 (Description) java.lang.reflect.Array.get(Object array, int index)方法返回指定数组对象中索引组件的值。 如果对象具有基本类型,则该值自动包装在对象中。 声明 (Declaration) 以下是java.lang.reflect.Array.get(Object array, int index)方法的声明。 public st

  • 以及为什么我在这个中得到..

  • 描述 (Description) java.lang.reflect.Field.getInt(Object obj)方法获取静态或实例int字段的值。 声明 (Declaration) 以下是java.lang.reflect.Field.getInt(Object obj)方法的声明。 public int getInt(Object obj) throws IllegalArgumen

  • 描述 (Description) 此方法将此String与另一个Object进行比较。 语法 (Syntax) 以下是此方法的语法 - int compareTo(Object o) 参数 (Parameters) 这是参数的细节 - O - 要比较的对象。 返回值 (Return Value) 如果参数是一个按字典顺序排列等于该字符串的字符串,则值为0; 如果参数是按字典顺序大于此字符串的字符