可选用于查找列表是否包含索引处的对象
Optional for finding if list contains object at index
我正在探索 Optionals 的使用。
下面我有一个例子,如果列表(包含数据对象)在特定索引处没有对象,我想实例化一个新对象(这里是数据对象)。
这可以通过 Optional 实现吗?
List<Data> dataList = new ArrayList<>();
for (int i = 0; i < dataList.size();i++) {
Data data = Optional.ofNullable(dataList.get(i)).orElse(new Data()); // this will throw an error of index out of bounds
}
我看不出你的代码有什么问题。对我来说效果很好。 get(i)
永远不会在您的代码中抛出 AIOBE,因为它受到 size()
的保护。
List<Integer> dataList = new ArrayList<>();
dataList.add(1);
dataList.add(null);
for (int i = 0; i < dataList.size(); i++) {
Integer data = Optional.ofNullable(dataList.get(i)).orElse(new Integer(-1));
System.out.println(data);
}
输出为 1 和 -1。
Optional
更具体地说 Optional.ofNullable()
并非旨在捕获在传递给其工厂方法的表达式执行中触发的任何异常。他们期望 returned 参考,null
或 ofNullable().
Optional
最初是为了convey/constraint一个方法可能return一个东西或一个东西(空)而设计的。
在某些情况下,我们还可以依靠 Optional
优雅地执行一些 null
检查。
这里您不属于任何这些情况,因为您想在 returning 列表元素或新对象之前检查列表的大小。
因此,条件语句,尤其是三元运算符看起来更适合:
Data data = i < dataList.size() ? dataList.get(i) : new Data();
我正在探索 Optionals 的使用。 下面我有一个例子,如果列表(包含数据对象)在特定索引处没有对象,我想实例化一个新对象(这里是数据对象)。 这可以通过 Optional 实现吗?
List<Data> dataList = new ArrayList<>();
for (int i = 0; i < dataList.size();i++) {
Data data = Optional.ofNullable(dataList.get(i)).orElse(new Data()); // this will throw an error of index out of bounds
}
我看不出你的代码有什么问题。对我来说效果很好。 get(i)
永远不会在您的代码中抛出 AIOBE,因为它受到 size()
的保护。
List<Integer> dataList = new ArrayList<>();
dataList.add(1);
dataList.add(null);
for (int i = 0; i < dataList.size(); i++) {
Integer data = Optional.ofNullable(dataList.get(i)).orElse(new Integer(-1));
System.out.println(data);
}
输出为 1 和 -1。
Optional
更具体地说 Optional.ofNullable()
并非旨在捕获在传递给其工厂方法的表达式执行中触发的任何异常。他们期望 returned 参考,null
或 ofNullable().
Optional
最初是为了convey/constraint一个方法可能return一个东西或一个东西(空)而设计的。
在某些情况下,我们还可以依靠 Optional
优雅地执行一些 null
检查。
这里您不属于任何这些情况,因为您想在 returning 列表元素或新对象之前检查列表的大小。
因此,条件语句,尤其是三元运算符看起来更适合:
Data data = i < dataList.size() ? dataList.get(i) : new Data();