如何使用Java Optional防止读取未初始化的数组?

时间:2018-07-11 16:04:20

标签: java arrays nullpointerexception optional

我有未初始化的数组

$metaquery = array(
    array(
        'key' => 'investmentprice',
        'value' => $_price,
        'compare' => 'BETWEEN'
    )
);
$query->set( 'meta_query', $metaquery );    

并尝试通过使用static String arr[];

防止读取它
Optional

很遗憾,我有Optional.ofNullable(arr[0]).ifPresent(System.out::println);

如何正确使用java.lang.NullPointerExeption

仅用于教育目的。我知道我可以按标准检查它。我只想学习使用Optionals。

我的目标是编写一个单行代码,如果它不为null且整个数组都已初始化,则将打印该数组的第一个元素。

4 个答案:

答案 0 :(得分:2)

您将需要以下内容:

Optional.ofNullable(arr)
        .flatMap(x -> Arrays.stream(x).findFirst())
        .ifPresent(System.out::println);

答案 1 :(得分:1)

另一个非常简单的选择:

   Optional.ofNullable(arr)
      .filter(a -> a.length > 0)
      .map(a -> a[0])
      .ifPresent(System.out::println);

过滤器确保数组不为空。因此,映射到数组的第一个元素是安全的。

它甚至看起来类似于标准方式:

if (arr != null && arr.length > 0) {
  System.out.println(arr[0]);
}

答案 2 :(得分:0)

Optional.ofNullable(arr_v_[0]).ifPresent(System.out::println);

由于NPE的失败,其中_v_为-arr为空,因此NPE

if(arr!=null)应该足够您了。

答案 3 :(得分:0)

您不能遍历未初始化的Array,因为它是NULL对象。有很多好的答案已经解决了这个问题,但是我认为最好理解一下,如果您首先初始化数组,它将可以工作。

String arr[] = new String[5];
Optional.ofNullable(arr[0]).ifPresent(System.out::println);

会工作。因为您有一个带有null的String的arr。

   String arr[] ; 
Optional.ofNullable(arr[0]).ifPresent(System.out::println);

将无法使用,因为您有一个Null对象。您需要采取一种变通方法,首先检查数组是否为空。