Java 有没有办法简化这个三元语句?

Java 有没有办法简化这个三元语句?,java,android,sqlite,Java,Android,Sqlite,因此,我目前的情况如下: responseJson.put("barcode", response.getBlob(response.getColumnIndex(DatabaseHelper.rBarcode)) == null ? "" : Base64.encodeToString(response.getBlob(response.getColumnIndex(DatabaseHelper.rBarcode)), B

因此,我目前的情况如下:

responseJson.put("barcode", 
    response.getBlob(response.getColumnIndex(DatabaseHelper.rBarcode)) == null 
        ? "" 
        : Base64.encodeToString(response.getBlob(response.getColumnIndex(DatabaseHelper.rBarcode)), 
            Base64.DEFAULT));
简单地说,我想做的是评估数据库调用是否返回null,如果返回null,则使用空字符串填充JSON,否则使用数据库中的值填充JSON


我觉得我可能遗漏了一些东西,不想对数据库进行两次调用,因此我知道我可以创建一个变量,只进行一次调用并将值存储在其中,但我想知道是否有其他方法可以做到这一点?

只需进行一次DB调用,然后重用结果:

byte[] barcode = response.getBlob(response.getColumnIndex(DatabaseHelper.rBarcode));
responseJson.put("barcode", barcode == null ? "" : 
    Base64.encodeToString(barcode, Base64.DEFAULT));
但如果将其作为if语句编写,则可能更易于阅读和维护:

byte[] barcode = response.getBlob(response.getColumnIndex(DatabaseHelper.rBarcode));
String value = "";
if (barcode != null) {
    value = Base64.encodeToString(barcode, Base64.DEFAULT);
}
responseJson.put("barcode", value);

Tim Biegeleisen的答案是最有效的,但作为一个表达:

return Optional.ofNullable(
       response.getBlob(response.getColumnIndex(DatabaseHelper.rBarcode)))
   .map(Base64::encodeToString)
   .orElse(""));

让blob在三元之前执行如何?Java没有空的合并运算符,因此最好使用变量。没有发现任何问题,但是response.getBlobreResponse.getColumnIndexDatabaseHelper.rBarcode语句执行两次,可以在将其传递给三元之前先存储在变量中。没有问题代码。但是response.getBlobreResponse.getColumnIndexDatabaseHelper.rBarcode语句执行了2次。可能是response.getBlobreResponse.getColumnIndexDatabaseHelper.rBarcode返回的不是null是的,这是计划,只是好奇是否有其他方法可以一起完成这一切,尝试在这里保存代码行:PThere有很多方法。保存代码行不是崇高的目标。可读性为王。@OleV.V。。。但不要告诉Scala人这一点-